将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=......
相关推荐
该错误通常发生在试图用一个较低版本的JDK加载由较高版本JDK编译的类文件时。本文将详细介绍如何解决这个问题,并提供两种不同的解决方案。 #### 一、编译时出现UnsupportedClassVersionError的处理方法 当您在...
当出现`java.lang.UnsupportedClassVersionError`错误时,通常是因为编译Java源代码所使用的JDK版本与目标系统上的JRE版本不兼容。例如,在上述案例中,项目部署时遇到了以下异常: ```log 2019-03-1823:19:27[org....
这种错误通常发生在编译器版本与实际使用的JVM版本不匹配的情况下,比如使用了较新的Java编译器生成的`.class`文件在较旧的JVM上运行时就会触发此类异常。 #### 二、错误原因分析 该错误的主要原因是由于MyEclipse...
描述部分虽然重复了标题内容,但通过“Java编译错误_UnsupportedClassVersionError.txt”这个文件名,我们可以推断出该文档可能是关于如何理解和解决Java环境中的`UnsupportedClassVersionError`问题的一个技术指南...
6. **java.lang.UnsupportedClassVersionError**: 如果编译的类文件版本高于正在运行的JVM版本,就会出现这个错误。确保JVM与编译器版本兼容。 7. **java.lang.VerifyError**: 验证器在类文件加载期间发现内部不...
- **`java.lang.UnsupportedClassVersionError`**:当JVM版本不支持类文件版本时抛出。 - **`java.lang.VirtualMachineError`**:当JVM出现严重错误时抛出,如内存损坏。 了解并掌握这些异常及其处理方法对于编写...
* java.lang.UnsupportedClassVersionError: Bad version number in .class file + 解决方案:检查 Java 的版本是否正确,是否存在版本不兼容的问题,尝试使用 compatible 的 Java 版本来解决问题。 四、JSP 异常...
`java.lang.UnsupportedClassVersionError`: Bad version number in .class file** - **异常描述**:类文件版本与JVM版本不兼容。 - **原因分析**:编译时使用的JDK版本高于运行时的JDK版本。 - **解决方案**: -...
不同的JVM版本可以向下兼容低版本的字节码,但不能执行高版本编译器产生的字节码,否则会引发`java.lang.UnsupportedClassVersionError`异常。 常量池是Class文件中极其重要的部分,它包含了各种字面量和符号引用。...
**不支持的类版本错误**:`UnsupportedClassVersionError` - **定义**:当Java虚拟机试图从读取某个类文件,但是发现该文件的主、次版本号不被当前Java虚拟机支持的时候,抛出该错误。 - **示例**:类文件版本过...
- **java.lang.UnsupportedClassVersionError**:这个错误表示试图运行的JAR文件中的类版本超过了运行环境JVM的支持版本。确保JAR是在与运行环境兼容的JDK下编译的。 在选择打包方法时,应根据项目需求和目标环境...
然而,由于类文件版本的变化,直接在早期JVM中加载由Java 5编译的类可能会导致`UnsupportedClassVersionError`。 其次,枚举是一种新的数据类型,使得常量集合的定义更加简洁和安全。枚举类的实例是不可变的,可以...
1 java.lang.UnsupportedClassVersionError 从字面上我们可以看出来是类版本不支持错误,换句话是jdk版本不兼容,原因是因为我们在高版本上编译class,在低版本的jvm中运行,这是我搜到的答案。理解起来还好。...
异常处理是Java语言的一个重要组成部分,它帮助开发者捕获和处理程序执行中发生的错误。在文档《Java常见异常类型及原因分析(下)》中,介绍了几种常见的Java异常类型及其产生原因,并提供了相应的分析。 首先,...
* Exception in thread “main" java.lang.UnsupportedClassVersionError,需要更换低版本的 JDK。 * the jvm is not supported in the plantment,需要选用更高版本的 JDK。 三、安装完成后 安装完成后,需要配置...
这标志着从Hibernate 3.5及更早版本到4.0的一个重大转变。在旧版本中,`SessionFactory`的构建是通过调用`Configuration.buildSessionFactory()`方法实现的。然而,在Hibernate 4.0中,这一过程被重构,现在必须先...
- **UnsupportedClassVersionError**: 当出现 `java.lang.UnsupportedClassVersionError` 错误时,通常是因为尝试在较低版本的JVM上运行较高版本的JDK编译的类文件。解决办法是调整使用的 JDK 版本,确保其与编译时...
首先,创建一个Java项目是Eclipse使用的基础。在启动Eclipse时,要注意工作区(workspace)的路径不应包含空格或中文字符,以免引发不必要的问题。新建Java项目时,可以选择系统自带的JRE或者自定义JDK。配置JRE至关...
2. **解决版本不兼容问题**:如果遇到 `java.lang.UnsupportedClassVersionError` 错误,通常是由于编译器版本与 JRE 版本不一致导致的。此时需要检查 Eclipse 的 JRE 设置是否正确。 3. **颜色与字体设置**:在...