记录一次打包错误:has been compiled by a more recent version of the Java Runtime 61.0

1,210 阅读2分钟

项目场景

项目中执行clean,再执行install时报错,错误如下

org/springframework/boot/maven/RepackageMojo 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 52.0

分析错误

为了准确理解来个翻译官:

image.png

看这意思是:org/springframework/boot/maven/RepackageMojo对应的Java Runntime类文件版本为61.0,太高了,但只能识别52.0以下的版本的。于是乎我查询了类文件版本和Java版本对应关系。

类文件版本对应表

  • 49 = Java 5
  • 50 = Java 6
  • 51 = Java 7
  • 52 = Java 8
  • 53 = Java 9
  • 54 = Java 10
  • 55 = Java 11
  • 56 = Java 12
  • 57 = Java 13
  • 58 = Java 14
  • 61 = Java 17

解决思路

通过对应表可知,这个文件是由java 17版本编译的,而现在系统中只能识别java 8以下的版本,java版本不一致导致打包失败,需要在出错的模块的打包插件中设置一个版本应该就好了。

为什么会出现Java 17的文件

image.png 上面是出错的截图,可以确认两个问题:

1、那个模块出现了问题;

2、打包插件中springboot的版本是未知的;

这就可能是因为版本是未知的,但需要继续打包所以自动引用最新的版本,从而造成不一致的问题

解决方案

找到出错模块的pom文件,设置一下打包插件的版本,和其他模块保持一下,重新刷新一下maven,再次打包就可以了 image.png

总结

因为之前有些模块的打包插件的版本也没有添加是可以正常使用的,但是今天突然不行了,后来发现spring boot 3.0版是基于java 17 的,不指定的话,默认引用最新的导致这种问题的发生,所以大家做的时候,所有模块的打包插件的版本一定要指定一下,避免出现这种问题,当然这个版本号最好在总的pom文件中定义一下,子模块中直接引用就可以了,不用在每个子模块中一一定义了。

我将每个包的spring-boot-maven-plugin打包插件都指定了版本。

具体还要看自己的JDK环境选择,我的是换成了低版本就可以了 !

结语

又是码代码的一天~

特别鸣谢: linab112

尊重原创~

此致敬礼!

求关注.jpg