低版本jdk运行高版本编译jar包失败(class file version 61.0), this version of the Java Runtime class file 52.0
卖眼镜的程序员 2024-07-17 13:35:01 阅读 57
省流:使用jdk1.8执行17编译的包,启动报错。
背景:
项目运行中难免出现服务器环节集成其它jar包的情况,而其它jar包的jdk版本可能和我们业务项目的jdk版本不一致,如果比我们业务版本低,那么可能不会出现问题, 因为jdk向下兼容,如果jdk版本比我们业务版本高,可能就会出现编译无法运行的情况。
我遇到的问题:
我的业务项目A是一个springboot项目,部署在服务器上,服务器的运行环境为jdk1.8,现在我需要在这个服务器上部署另外一个项目B,但是项目B使用的编译环境为17(但是项目B需要没有8版本以上的代码写法,如果你的项目B有8以上的写法,可能无法使用17编译成8的版本启动!)
然后我在1.8的jdk运行环境下执行17编译的包,启动提示报错信息:
Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file
Exception in thread "main"
java.lang.UnsupportedClassVersionError:
com/nuctech/init/WebApplication has been compiled by
amore recent version of the Java Runtime
(class file version 61.0) this version of the Java Runtime
only recognizes class file versions up to 52
原因分析:
报错大意为:无法使用1.8的环境(52对应jdk1.8)运行17(61对应的jdk17)的程序。
解决方案:
一:设置编译的jdk环境为低版本环境:
如果你使用Maven来编译代码, 在Maven的pom.xml文件中,添加配置:
<code><properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
如果你使用Gradle来编译代码,在Gradle的build.gradle文件中,配置:
tasks.withType(JavaCompile) {
sourceCompatibility = '8'
targetCompatibility = '8'
}
二:设置运行的jdk环境为高版本环境
安装jdk17,修改环境变量为17的环境变量,这样既可以向下兼容项目A 又可以支持项目B,但是可能因为jdk环境不一样带来其它问题, 这个大家只能自己根据项目实际情况去测试
三:使用docker容器, 容器内部指定每个项目的jdk版本,如在项目A指定jdk8 在项目B的容器指定jdk17
参考资料
jdk17编译出兼容jdk8的代码
上一篇: 服务注册/发现-Eureka-微服务核心组件【分布式微服务笔记02】
下一篇: 软件测试面试必杀篇:【2023软件测试面试八股文宝典】
本文标签
低版本jdk运行高版本编译jar包失败(class file version 61.0) this version of the Java Runtime class file 52.0
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。