`
zengjinliang
  • 浏览: 301613 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JDK不兼容异常(class file has wrong version 49.0...)

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

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 的版本不符的情況" 了.
分享到:
评论

相关推荐

    jdk-java-version-1.8.0.45.rar

    64位的jdk安装文件,Java-version-1.8.0_45版本,可以直接下载。

    jdk1.8class反编译

    jdk1.8编译类文件反编译工具。使用方式:java -jar procyon-decompiler-0.5.30.jar ***.class -o c:\**

    Hibernate相关jar包括新版本jdk不兼容旧版本的jar.zip

    Hibernate相关jar包括新版本jdk不兼容旧版本的jar.zip

    Java 17,JDK17 version "17.0.2"

    Java 17是一款十分专业的编程工具,主要应用于web网页的开发、Android的开发、客户端的开发等等,对于开发人员来说,Java基本等于了JDK。而在新的版本中,进行了一些功能增强,有需要的小伙伴们快来下载体验吧! ...

    打开Intellij Idea 2020.1 提示 cannot load a jdk class: com.sun.jdi.Field

    最近升级到2020.1,出现cannot load a jdk class: com.sun.jdi.Field 可以直接修改 修改前  IDEA_JDK_64=C:\Program Files\Java\jdk1.8.0_144 修改后 IDEA_JDK_64=C:\Program Files\JetBrains\IntelliJ IDEA 2019.3...

    dubbo(兼容jdk1.8)

    dubbo-admin.war(兼容jdk1.8)可以在tomcat上直接部署。

    ojdbc14 Oracle JDBC Driver version 10.2.0.5.0

    Specification-Title: Oracle JDBC driver classes for use with JDK14 Sealed: true Created-By: 1.4.2_14 (Sun Microsystems Inc.) Implementation-Title: ojdbc14.jar Specification-Vendor: Oracle Corporation ...

    JDK1.8下载 : jdk_8.0.1310.11_64.zip

    JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具. JDK是学好Java的第一步。不管是你要学习java...

    jdk-11.0.8.jdk.zip

    jdk-11.0.8.jdk.zip

    bcprov-jdk15to18-1.69.jar

    bcprov-jdk15to18-1.69.jar bcprov-jdk15to18-1.69.jar bcprov-jdk15to18-1.69.jar bcprov-jdk15to18-1.69.jar bcprov-jdk15to18-1.69.jar bcprov-jdk15to18-1.69.jar bcprov-jdk15to18-1.69.jar bcprov-jdk15to18-...

    兼容jdk1.8的spring2.5.6.jar

    网上能找到同样的资源,但是兼容了jdk1.8,在jdk1.6下运行就会报错了。此jar包 兼容jdk1.6、jdk1.7、jdk1.8,仅仅修改了org.springframework.core.JdkVersion这个类,请放心使用。

    jdk1.6.0_191.linux.x64.tar.gz

    解压后使用方法:(不执行下面两步,运行java -version会报下面的错误,解压命令:tar xvzf jdk1.6.0_191.linux.x64.tar.gz) # Error occurred during initialization of VM # java/lang/NoClassDefFoundError: java...

    Ja-netfiter-2022.2.0 主要更新对 jdk 17的兼容

    jdk 17需要 新增 配置 如下 jvm参数 --add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED --add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED

    bcprov-jdk16-1.45.jar.zip

    如下:首先在jdk包中 编辑jdk1.8_014\jre\lib\security\java.security 文件 增加这行 security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider 其次,把bcprov-jdk16-1.45.jar添加到到 jre\...

    jdk的安装.doc

    本里面具有jdk的安装具体步骤,有需要的朋友可以自行下载哦!

    兼容jdk1.8的spring.jar包

    该jar包兼容了jdk1.3到1.8,可以放心使用。

    bcprov-jdk15on-1.52.jar包

    Bouncy Castle用于 Java 平台的开放源码的轻量级密码术包,它支持大量的密码术算法。

    jdkVersion.rar

    包含8,11,12

    EclipseADT-24.2.0-支持jdk8.zip

    1.Google已停止对ADT的支持,尤其是JDK8推出后,ADT已经不能使用,报unsupported class file version 52.0等问题 2.网上的adt24.0.2版本对logcat日志有问题 3.里面已经包含...

    bcprov-jdk15on-1.56.jar中文文档.zip

    bcprov-jdk15on-***.jar中文文档.zip,java,bcprov-jdk15on-***.jar,org.bouncycastle,bcprov-jdk15on,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,bouncycastle,bcprov,jdk15on,中文API文档,手册,...

Global site tag (gtag.js) - Google Analytics