Jbuilder2006帶來的麻煩事(JDK 版本問題)

noter發表於2007-05-22

Jbuilder2006自帶的jdk版本是1.5的, 公司伺服器上的jdk是1.4的版本, 以前的程式都是基於1.4版本開發的, 由此就產生了一些jdk版本衝突的問題(俺們的程式都是在自己的機器上寫好程式, 測試通過之後, 再提交到cvs, 伺服器再從cvs上update下來編譯)。

由於伺服器使用的是1.4的jdk, 所以我在本機上也裝了個1.4的jdk,  每次新建工程, 我都把jbuilder相關的環境改成jdk1.4, 使用1.4的jvm, 這樣開發一般的application也沒有出現什麼問題, 程式碼提交到伺服器上也能順利編譯。 但是最近有一個應用需要使用tomcat, 在建立webModule的時候, 我選擇4.1 的tomcat, 然後編寫servlet程式, 但是很奇怪, 我發現jbuilder把我這個工程的屬性改了, jdk變成1.5了, 馬上改回1.4的, 然後在jbuilder上編譯測試, 沒有問題, 部署到本機的tomcat( 4.1)上測試,也通過, 於是就部署到伺服器上, 並且把程式碼提交到cvs,然後再伺服器上把ant的編譯指令碼加上,暫時沒有問題。

後來發現程式有點小問題, 修改了一個檔案(不是servlet), 然後提交, 在伺服器上把程式碼update下來之後, 用ant編譯, 出現以下問題:

compile:
    [javac] Compiling 11 source files to /... .../WEB-INF/classes
    [javac] /... .../myJavaFile.java:17: cannot access java.lang.Object
    [javac] bad class file: /home/j2sdk1.4.1_01/jre/lib/rt.jar(java/lang/Object.class)
    [javac] class file has wrong version 48.0, should be 47.0
    [javac] Please remove or make sure it appears in the correct subdirectory of the classpath.
    [javac]     private String str = null;
    [javac]             ^
    [javac] 1 error

BUILD FAILED
/... .../build.xml:72: Compile failed; see the compiler error output for details.

把工程部署到本機的tomcat上,服務可以起來, 於是在瀏覽器上輸入servlet的url測試, 出現以下錯誤:

java.lang.UnsupportedClassVersionError: com.... .../MyJavaFile (Unsupported major.minor version 48.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)

鬱悶,google去, 找到一個:

(原文轉自 http://www.360doc.com/showWeb/0/0/31881.aspx )

1.java.lang.UnsupportedClassVersionError: com/mdcchina/userinfo/logic/UserManager (Unsupported major.minor version 49.0)提示如上的錯誤,很是鬱悶
經過研究和比較在兩個不同環境下的編譯執行,終於發現這個主要是由於我的機子上安裝了兩個不 同版本的JDK導致的,我想很多的朋友在嘗試新的JDK的時候,可能不會刪除1.4的版本,但是要注意的是要將JAVA_HOME, CLASS_PATH,PATH等等的環境變數都修改成相關的JDK1.5的目錄下面去,因為1.5相對於以前的版本的變化比較大.
2.上面的問題排除後,在執行TOMCAT5.0時候由出現瞭如下的錯誤:
2005-11-17 19:38:47 StandardWrapperValve[action]: Servlet.service() for servlet action threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP

Generated servlet error:
C:/application/Tomcat 5.0/work/Catalina/localhost/mlinkweb/org/apache/jsp/layouts/layout_005findex_jsp.java:7: cannot access java.lang.Object


Generated servlet error:
bad class file: C:/application/Java/jdk1.5.0/jre/lib/rt.jar(java/lang/Object.class)
class file has wrong version 49.0, should be 48.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
public final class layout_005findex_jsp extends org.apache.jasper.runtime.HttpJspBase
             ^
1 error

這個問題這是讓我鬱悶之極啊(^_^)
最後在SUN的JAVA論壇裡面找到了答案,只要將JDK1.5的LIB下面的TOOLS.JAR覆蓋TOMCAT5.0目錄/common/lib下面的tools.jar,然後重啟TOMCAT5.0就可以了

這 位老兄的問題和我有點類似,不過他的是是在1.4下升到1.5的時候出的問題, 可是我本意是在1.4下開發, 1.4下執行, 無奈我機器上有兩個版本的jdk,  不知道怎麼的給混到1.5 的版本上了(俺想學習一下1.5 的特性, 不想刪除), 而且我的伺服器是1.4的,這個我也不能更改, 真是鬱悶, 我試過重新新建工程, 然後把程式碼copy過去, 編譯出來的class放到伺服器上可以執行, 可是程式碼還是不能在伺服器上編譯,而且我的程式碼也沒有使用過1.5的特性, 真不明白是怎麼回事, 讓俺五一好生鬱悶。


 

【來源】

 

相關文章