低版本jdk运行高版本编译jar包失败(class file version 61.0), this version of the Java Runtime class file 52.0

2024-02-26 1977阅读

温馨提示:这篇文章已超过391天没有更新,请注意相关的内容是否还可用!

省流:使用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
低版本jdk运行高版本编译jar包失败(class file version 61.0), this version of the Java Runtime class file 52.0

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

低版本jdk运行高版本编译jar包失败(class file version 61.0), this version of the Java Runtime class file 52.0

原因分析:

                报错大意为:无法使用1.8的环境(52对应jdk1.8)运行17(61对应的jdk17)的程序。

解决方案:

        一:设置编译的jdk环境为低版本环境:

        如果你使用Maven来编译代码, 在Maven的pom.xml文件中,添加配置:
    8
    8

        如果你使用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的代码

                

 

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]