`
zengjinliang
  • 浏览: 308819 次
  • 性别: 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 的版本不符的情況" 了.
分享到:
评论

相关推荐

    java.lang.UnsupportedClassVersionError Bad version number in .class file异常的解决办法

    ### java.lang.UnsupportedClassVersionError: Bad version number in .class file 异常的解决办法 #### 一、问题概述 在使用MyEclipse进行Java开发的过程中,可能会遇到`java.lang.UnsupportedClassVersionError:...

    Bad version number in .class file 错误

    "Bad version number in .class file" 是一个在Java编程中常见的错误,通常出现在尝试运行或编译不兼容的.class文件时。这个错误意味着.class文件(Java字节码)的版本与正在执行它的JVM(Java虚拟机)版本不匹配。...

    Unable to load class ‘javax.xml.bind.JAXBException‘(csdn).pdf

    1. **JDK版本不兼容**:Android Studio项目可能依赖于特定版本的JDK来正确运行。如果你的系统中安装了多个JDK版本,或者Android Studio配置的JDK版本与项目需求不符,就会出现此类错误。确保你的Android Studio使用...

    jdk-java-version-1.8.0.45.rar

    本资源"jdk-java-version-1.8.0.45.rar"是一个压缩包,包含了64位版本的JDK,具体版本号为1.8.0_45。这个版本的JDK对于那些需要在64位操作系统上开发和运行Java应用的人来说至关重要。 JDK 1.8.0_45是Oracle公司...

    tomcat:bad version number in class file的解决方法

    然而,在使用 Tomcat 时,可能会出现 "bad version number in class file" 的错误,这个错误是由于 Java 编译版本和运行时版本不兼容所引起的。在这里,我们将讨论这个问题的解决方法。 问题分析 在 Tomcat 启动时...

    IntelliJ IDEA引入第三方jar包或查看Java源码的时候报decompiled.class file bytecode version:52.0(java 8)错误的解决办法

    然而,可能会遇到一个常见的错误提示:“decompiled.class file bytecode version:52.0(java 8)”,这表明IDE在尝试反编译一个针对Java 8版本编译的.class文件,但你的环境可能不兼容或者配置不正确。 首先,理解...

    Java 17,JDK17 version "17.0.2"

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

    jbuilder 2006 j2me ALERT: java/lang/ClassFormatError: Bad version information.

    在Java开发领域,`java.lang.ClassFormatError: Bad version information`是一个常见的错误,通常发生在尝试加载或执行不兼容的字节码时。这个错误表明Java虚拟机(JVM)遇到了一个它无法识别或者处理的类文件版本。...

    兼容jdk1.8的spring2.5.6.jar

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

    jdkVersion.rar

    标题“jdkVersion.rar”指的是一个压缩包文件,其中包含了不同版本的Java Development Kit(JDK)。JDK是Oracle公司提供的用于开发和运行Java应用程序的重要工具集。在这个压缩包里,我们看到了三个不同的JDK版本:8...

    spring2.5+JDK1.8 版本报错的解决办法(修改后jar)

    原来这个工程的spring是2.5,网上说spring2.5必须要求JDK1.5以上版本,但不能兼容1.8。 没道理会这样吧? 原来spring-2.5.5.jar有一个检查JDK版本号的类,编码质量略低,导致1.8被误认为未达到“JDK1.5以上版本”...

    jdk-11.0.8.jdk.zip

    - 下载并解压`jdk-11.0.8.jdk.zip`,根据操作系统设置环境变量`JAVA_HOME`,`PATH`和`CLASSPATH`。 - 验证安装成功,通过命令行输入`java -version`和`javac -version`查看版本信息。 4. **JDK 11的开发实践:** ...

    打开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...

    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\...

    jdk1.8class反编译

    在 JDK 1.8 版本中,开发者们有时需要查看已编译的`.class`文件的源代码,以便理解其内部工作原理或进行调试。这时,就需要用到反编译工具。反编译是从已编译的字节码文件(.class文件)还原出类似源代码的形式,...

    bcprov-jdk16-143.jar和bcprov-jdk15-135.jar

    解决no such provider: BC 问题所需的JAR 在jdk中的jre\lib\security修改java.security文件, security.provider.6=com.sun.security.sasl.Provider 下面添加...bcprov-jdk16-143.jar提供加密,解密,生成密钥对等方法

    bcprov-jdk16-1.46.jar

    bcprov-jdk16-1.46.jar

    jdk21集成cxf示例程序

    **JDK21集成CXF详解** 在Java开发中,CXF是一个广泛使用的开源框架,主要用于构建和开发服务导向架构(SOA)的应用程序。它提供了SOAP和RESTful Web服务的支持,同时也支持WS-*规范。CXF允许开发者利用Java语言的...

    bcprov加密库

    Caused by: java.util.jar.JarException: file:/opt/code/signal-Server-master/target/TextSecureServer-1.87.jar has unsigned entries - org/whispersystems/dispatch/DispatchManager$4.class at javax.crypto....

Global site tag (gtag.js) - Google Analytics