`
asjava
  • 浏览: 136981 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

JVM版本引起的一个错误java.lang.UnsupportedClassVersionError

 
阅读更多

将WebApp从开发环境部署到生产环境,访问页面出现错误:

Caused by: java.lang.UnsupportedClassVersionError: com/wzr/dao/service/EmployeeService : Unsupported major.minor version 52.0 (unable to load class com.wzr.dao.service.EmployeeService)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2476)

 ...

说明:这里com/wzr/dao/service/EmployeeService是自己定义的类.

错误原因是开发环境tomcat所用的jre(JVM)与生产环境jre版本不一致造成的.

浏览器登录tomcat,查看Complete Server Status发现:
JVM Version:1.7.0_79-mockbuild_2015_04_15_00_02-b00
命令行查看:
# /usr/local/tomcat/bin/catalina.sh version
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/default
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.0.21
Server built:   Mar 23 2015 14:11:21 UTC
Server number:  8.0.21.0
OS Name:        Linux
OS Version:     2.6.32-504.16.2.el6.x86_64
Architecture:   amd64
JVM Version:    1.8.0_74-b02
JVM Vendor:     Oracle Corporation

两个JVM版本不一致,查看当天日志
localhost.2016-04-01.log
01-Apr-2016 08:00:58.933 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64/jre
也就是说/usr/local/tomcat/bin/下的tomcat使用的是/usr/java/default下1.8.0的jre,而随系统启动的tomcat启动时加载的却是/usr/lib/jvm/下的1.7.0的jre

搜索配置了jre路径的配置文件:

find /usr/local/tomcat | xargs grep -ril "JRE_HOME"
得到
...
/usr/local/tomcat/bin/setclasspath.bat
/usr/local/tomcat/bin/tool-wrapper.sh
/usr/local/tomcat/bin/catalina.bat
/usr/local/tomcat/bin/tool-wrapper.bat
/usr/local/tomcat/bin/catalina.sh
/usr/local/tomcat/bin/setclasspath.sh

查看catalina.sh

...
#   Do not set the variables in this script. Instead put them into a script
#   setenv.sh in CATALINA_BASE/bin to keep your customizations separate.
...
#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" argument.
#
#   JRE_HOME        Must point at your Java Runtime installation.
#                   Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
#                   are both set, JRE_HOME is used.

按官方建议新建:setenv.sh
export JRE_HOME=/usr/java/default
重启服务或重启服务器
# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh
再次访问页面,成功.
另外,也可以通过修改setclasspath.sh文件,在里面添加下面变量解决问题。如下所示
export JRE_HOME=.......
(或)export JAVA_HOME=......

 

 

分享到:
评论

相关推荐

    java.lang.UnsupportedClassVersionError问题的解决方法

    该错误通常发生在试图用一个较低版本的JDK加载由较高版本JDK编译的类文件时。本文将详细介绍如何解决这个问题,并提供两种不同的解决方案。 #### 一、编译时出现UnsupportedClassVersionError的处理方法 当您在...

    java.lang.UnsupportedClassVersionError问题解决

    当出现`java.lang.UnsupportedClassVersionError`错误时,通常是因为编译Java源代码所使用的JDK版本与目标系统上的JRE版本不兼容。例如,在上述案例中,项目部署时遇到了以下异常: ```log 2019-03-1823:19:27[org....

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

    这种错误通常发生在编译器版本与实际使用的JVM版本不匹配的情况下,比如使用了较新的Java编译器生成的`.class`文件在较旧的JVM上运行时就会触发此类异常。 #### 二、错误原因分析 该错误的主要原因是由于MyEclipse...

    Java编译错误-UnsupportedClassVersionError.txt

    描述部分虽然重复了标题内容,但通过“Java编译错误_UnsupportedClassVersionError.txt”这个文件名,我们可以推断出该文档可能是关于如何理解和解决Java环境中的`UnsupportedClassVersionError`问题的一个技术指南...

    java编程常见问题

    6. **java.lang.UnsupportedClassVersionError**: 如果编译的类文件版本高于正在运行的JVM版本,就会出现这个错误。确保JVM与编译器版本兼容。 7. **java.lang.VerifyError**: 验证器在类文件加载期间发现内部不...

    java异常详解

    - **`java.lang.UnsupportedClassVersionError`**:当JVM版本不支持类文件版本时抛出。 - **`java.lang.VirtualMachineError`**:当JVM出现严重错误时抛出,如内存损坏。 了解并掌握这些异常及其处理方法对于编写...

    java异常解决方案.docx

    * java.lang.UnsupportedClassVersionError: Bad version number in .class file + 解决方案:检查 Java 的版本是否正确,是否存在版本不兼容的问题,尝试使用 compatible 的 Java 版本来解决问题。 四、JSP 异常...

    java 遇到的各种异常

    `java.lang.UnsupportedClassVersionError`: Bad version number in .class file** - **异常描述**:类文件版本与JVM版本不兼容。 - **原因分析**:编译时使用的JDK版本高于运行时的JDK版本。 - **解决方案**: -...

    JVM--字节码和类的加载篇1

    不同的JVM版本可以向下兼容低版本的字节码,但不能执行高版本编译器产生的字节码,否则会引发`java.lang.UnsupportedClassVersionError`异常。 常量池是Class文件中极其重要的部分,它包含了各种字面量和符号引用。...

    java 异常总结

    **不支持的类版本错误**:`UnsupportedClassVersionError` - **定义**:当Java虚拟机试图从读取某个类文件,但是发现该文件的主、次版本号不被当前Java虚拟机支持的时候,抛出该错误。 - **示例**:类文件版本过...

    java打包jar方案的优缺点分析及解决方案

    - **java.lang.UnsupportedClassVersionError**:这个错误表示试图运行的JAR文件中的类版本超过了运行环境JVM的支持版本。确保JAR是在与运行环境兼容的JDK下编译的。 在选择打包方法时,应根据项目需求和目标环境...

    Java理论与实践:在JDK早期版本中使用Java 5的语言特性

    然而,由于类文件版本的变化,直接在早期JVM中加载由Java 5编译的类可能会导致`UnsupportedClassVersionError`。 其次,枚举是一种新的数据类型,使得常量集合的定义更加简洁和安全。枚举类的实例是不可变的,可以...

    java项目开发中常见异常

     1 java.lang.UnsupportedClassVersionError  从字面上我们可以看出来是类版本不支持错误,换句话是jdk版本不兼容,原因是因为我们在高版本上编译class,在低版本的jvm中运行,这是我搜到的答案。理解起来还好。...

    Java常见异常类型及原因分析(下).pdf

    异常处理是Java语言的一个重要组成部分,它帮助开发者捕获和处理程序执行中发生的错误。在文档《Java常见异常类型及原因分析(下)》中,介绍了几种常见的Java异常类型及其产生原因,并提供了相应的分析。 首先,...

    weblogic安装步骤以及报错解决

    * Exception in thread “main" java.lang.UnsupportedClassVersionError,需要更换低版本的 JDK。 * the jvm is not supported in the plantment,需要选用更高版本的 JDK。 三、安装完成后 安装完成后,需要配置...

    Hibernate4.0

    这标志着从Hibernate 3.5及更早版本到4.0的一个重大转变。在旧版本中,`SessionFactory`的构建是通过调用`Configuration.buildSessionFactory()`方法实现的。然而,在Hibernate 4.0中,这一过程被重构,现在必须先...

    sql数据库连接说明书1

    - **UnsupportedClassVersionError**: 当出现 `java.lang.UnsupportedClassVersionError` 错误时,通常是因为尝试在较低版本的JVM上运行较高版本的JDK编译的类文件。解决办法是调整使用的 JDK 版本,确保其与编译时...

    Eclipse的使用

    首先,创建一个Java项目是Eclipse使用的基础。在启动Eclipse时,要注意工作区(workspace)的路径不应包含空格或中文字符,以免引发不必要的问题。新建Java项目时,可以选择系统自带的JRE或者自定义JDK。配置JRE至关...

    Eclipse 工具的使用

    2. **解决版本不兼容问题**:如果遇到 `java.lang.UnsupportedClassVersionError` 错误,通常是由于编译器版本与 JRE 版本不一致导致的。此时需要检查 Eclipse 的 JRE 设置是否正确。 3. **颜色与字体设置**:在...

Global site tag (gtag.js) - Google Analytics