Spring-Maven项目降级后启动报错:Unsupported major.minor version 52.0
降级到Tomcat7/JRE1.7后仍出现Unsupported major.minor version 52.0错误
我最近因为基础设施限制,把一个小型应用从Tomcat 8/JRE 1.8降级到了Tomcat 7/JRE 1.7。已经把JRE设置成1.7,编译器合规级别也改成1.7了,但Tomcat 7启动的时候还是弹出Unsupported major.minor version 52.0的错误。我试过网上相关问题里的所有解决方案,都没解决。
当前的配置信息如下:
- 编译器合规级别:1.7
- 目标运行时:Apache Tomcat v7.0
- JRE系统库:jdk1.7.0_80
- Maven POM片段:
<properties> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties>
几个实用的排查方向
我之前碰到过类似的坑,给你列几个可能没注意到的点:
- 彻底清理旧编译产物:有时候IDE或者Maven的target目录里还留着JDK8编译的class文件,别光点IDE的clean,手动删掉整个
target(或者项目里的bin/classes)目录,再重新执行mvn clean package从头编译一遍。 - 确认Maven自身的JDK版本:Maven编译时用的JDK可能和你项目设置的不一样,在命令行敲
mvn -version看看输出里的Java版本是不是1.7。如果不是,要么修改Maven配置文件里的JAVA_HOME指向JDK1.7,要么在IDE的Maven设置里指定对应的JRE。 - 检查Tomcat启动用的JDK:Tomcat启动时可能没用到你配置的JRE1.7。去Tomcat的
bin目录看看有没有setenv.sh(Linux)或setenv.bat(Windows),里面的JAVA_HOME是不是指向JDK1.7。另外也可以看Tomcat的启动日志,找JVM版本信息,确认启动时用的是不是1.7。 - 排查第三方依赖的编译版本:说不定项目里引入的某个第三方jar包是用JDK8编译的。可以用
javap -verbose <类名> | grep major命令检查jar包里的class文件,要是发现major版本是52(对应JDK8)的依赖,要么换这个依赖兼容JDK7的版本,要么考虑排除掉它。 - IDE运行配置的细节:如果是在IDE里启动Tomcat,去Run/Debug Configuration里看看JRE选项是不是选了JDK1.7,有时候IDE会默认用全局JDK,得手动改成项目指定的版本。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

