【Java异常】完美解决this version of the Java Runtime only recognizes class file versions up to xx.0异常
哈喽各位,我是小白。时隔多日我又回来啦!
最近在部署项目后,发现线上业务数据都变成了默认值0,而且这个现象,仅仅出现在当次上线后生成的数据中
于是我去扫了一眼日志,发现如下报错
Caused by:
java.lang.UnsupportedClassVersionError: org/eclipse/core/resources/IResource has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0
翻译过来就是说类文件的编译环境是61.0,而运行环境为55.0,显然运行环境低于编译环境
于是当发现该问题时,我迅速排查了容器的jdk版本、项目中Maven编译使用的jdk版本等,发现均为JDK11
这个时候我就很纳闷了,版本是一致的,为什么会突然报这个错误呢?
百度,Google了一遍,该用的方法都用了,可还是这个问题!
正当我百思不得其解时,我看到了报错的前半部分:
我项目中并未使用 org/eclipse/core/resources/IResource
类/接口,可是却报了这个类的编译错误呢?
我顺势在项目中搜了一下这个类,不搜不知道,一搜才发现果真这个类是JDK17所编译的。
这我就很好奇了,为什么啊,明明我的项目没有用到过JDK17的东西,可为什么它会用JDK17来编译这个文件呢?
顺着这个思路,我就去看了项目的 pom.xml
文件,这看完我才知道,原来引用这个的pom版本写了个版本区间,每次都会取最高的版本
为了验证这个想法,我又去Maven仓库搜了一下。嘿,您猜怎么着?还真是!!!
这哥们6月13号更新了一波版本,而在此之前我们的最后一次部署是6月5日!
哎呦这个老6,真的是服了you!
为了验证这个问题,我把该依赖的版本号做了一次指定,将代码本地编译,嘿,果然是JDK11啊
哎呦我的个乖乖,这个问题整了老半天,真是服了!
解决了,改了个pom依赖版本号,哪有什么改 <properties>
标签这说,净瞎扯!