JDK不兼容异常(转)

昨天在調試程序時出現,網路上面找到了解決的辦法:

JDK不兼容异常(class file has wrong version 49.0, should be 48.0)及解决方法 |
 
有些时间,我们会遇到版本不匹配的问题。如:
bad class file: /usr/java/jdk1.5.0_06/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.

这是因为编译环境和运行环境的不一致造成的,比如tomcat5.5和jdk1.5配合的时候,可能就会出现。解决这个问题的方法:copy jdk1.5的lib/tools.jar到tomcat5.5的common/lib/tools.jar,覆盖掉原有文件就可以了。

1. 為甚麼會出現這個 error 呢?

出現這個 error 的原因, 是因為 tomcat/common/lib/ 目錄底下tools.jar 的版本, 和Tomcat 選擇的 JVM 的版本不一致所造成.
並不是 "编译环境和运行环境的不一致造成". 因為這裡只牽涉到編譯 (Compilation), 並沒有牽涉到運行(execution). 所以我們會發現, 這個 Error 只會於編譯失敗的時候出現.

舉例說, 由於 Tomcat/common/lib/ 目錄底下tools.jar 的版本是 1.4, 而 Tomcat 卻選擇 1.5 版本的 JVM.
所以會出現
"class file has wrong version 49.0, should be 48.0" 的 error message.
當中 49.0 即是指 Java 的 1.5 版本, 而 48.0 是指 Java 的 1.4 版本.

2 .那為甚麼會出現 tools.jar 的版本和 JVM 的版本不符的情況呢?

首先要說明, 於 tomcat/common/lib/ 目錄底下的那個 tools.jar 其實不是 tomcat 原本有的. 其實那是當你安裝 Tomcat 時, Tomcat 從你指定的 JDK 目錄底下的 lib 目錄抄過去的.

這個 tools.jar 有何用處? 那其實是 JDK 本身附有的jar檔, 是用來方便我們寫 Java 程式的 (eg. 方便編譯 Java). 舉例說, 平時我們用的 javac 命令, 其實本身就是一個由 java 寫成的程式, 而那正正就是於 tools.jar 裡面.

那為甚麼 Tomcat 需要將 JDK 的 tools.jar 抄去自己那裡? 那是因為 Tomcat 需要用 tools.jar 裡面的 javac 程式, 去編譯我們寫好的 JSP 檔案.

可是, 編譯的時候, 也需要 Java 程式本身需要的 library (class files) 才可以. 那麼 Tomcat 到哪裡去找那這些 library 呢? 到哪裡找, 其實是取決於Tomcat 本身選定哪個 JVM, 而這個我們是可以自行到 Tomcat Configure裡的 Java 版面裡設定的. Tomcat 是會到你所設定的那個 JVM 所屬的那個 JRE 目錄底下的 lib 目錄找 library, 亦即是那個 rt.jar 檔案 (Java 的 library 是在裡面的).


知道了這些, 終於可以回答 "為甚麼會出現 tools.jar 的版本和 JVM 的版本不符的情況" 了.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值