Java `Jenkins升级后,类文件的版本错误
几天前,我将Jenkins升级到版本Java `Jenkins升级后,类文件的版本错误,java,maven,jenkins,Java,Maven,Jenkins,几天前,我将Jenkins升级到版本1.643。之前,我们使用的是Jenkins1.593。从Jenkins1.612开始,Jenkins需要Java 7,请参阅和。我们的Jenkins服务器有Java8 我有一个由子模块组成的Maven项目。 在Jenkins中的作业配置中,我将构建配置为使用JDK1.6 在构建环境中,它实际上是1.6: JAVA_HOME=/var/lib/jenkins/tools/hudson.model.JDK/1.6 其中一个子模块无法在Jenkins上构建,出现
1.643
。之前,我们使用的是Jenkins1.593
。从Jenkins1.612开始,Jenkins需要Java 7,请参阅和。我们的Jenkins服务器有Java8
我有一个由子模块组成的Maven项目。
在Jenkins中的作业配置中,我将构建配置为使用JDK1.6
在构建环境中,它实际上是1.6:
JAVA_HOME=/var/lib/jenkins/tools/hudson.model.JDK/1.6
其中一个子模块无法在Jenkins上构建,出现以下错误:
[ERROR] /var/lib/jenkins/<REDACTED>.java:[15,-1] cannot access java.lang.Object
bad class file: java/lang/Object.class(java/lang:Object.class)
class file has wrong version 52.0, should be 50.0
因此,如您所见,它从当前的$JAVA_HOME
中获取rt.jar
,因此它可以交叉编译,目标为1.6
我对Java8的起源有点迷茫。在Jenkins升级之前,我们已经在服务器上使用Java8,并以Java6为目标进行交叉编译。我错过了什么
编辑
我需要这个吗?如果我不加评论
${java.home}/lib/rt.jar
在pom.xml
中,我仍然可以在桌面上交叉编译,类文件仍然是50.0版
编辑
当我取出那个部件时,构建不再失败。
也就是说我自己解决了
我想把问题改为:为什么它一开始就失败了?为什么在Jenkins 1.593上没有失败呢?我将我的pom.xml
更改为这个答案中的描述方式:
org.apache.maven.plugins
maven编译器插件
3.3
1.6
1.6
UTF-8
${java.home}/lib/rt.jar
如你所见:
- 我显式设置了
groupId
- 我明确地将
版本设置为最新版本,3.3
配置
参数的格式稍有不同
我有根据的猜测是,Jenkins服务器上的Maven没有在compilerArguments
中获取配置,只有当它直接在configuration
中时才会感到高兴。我让评论来解释如何以及为什么,但对我来说,问题已经解决了。我认为你的假设有一些错误
compilerArguments
。一直都是这样
正如您可以从中看到的,编译器参数
/编译器参数
仅用于配置节本身不支持的参数。由于支持bootclasspath
,因此在compilerArgs
/compilerArguments
部分中使用它通常是不正确的
compilerArgs
/compilerArguments
仅在以下情况下使用,这不适合您的配置
第三点可能是它不适合你的最重要原因。在用例中使用配置
部分应该没有问题,事实上,根据您的问题/答案,情况似乎是这样的
还要注意,java.home
不是java\u home
。我在另一个答案中对此进行了扩展。我想这与为什么你会看到詹金斯版本之间的变化有关。实际上没有必要在问题和答案上都有相同的内容。选择一个或另一个:)什么?当我还在编辑的时候,你跳了进来。好吧,如果我理解正确的话:我发现的$JAVA_HOME
是Jenkins在开始工作之前就知道的,但不一定与Maven在触发我的问题的事件发生时使用的JRE/JDK相同,因为编译器插件的作用。我可以将我的工作设置为使用JDK1.8构建,将编译器插件设置为使用答案中的配置构建为1.6,并且我仍然拥有一个有效的构建。这是正确的假设吗?很好。这意味着我可以将一些内容移动到父pom,并简化其他pom。不过,首先测试它-可能总会有其他东西干扰它。当然。这就是功能分支的用途!:)@AmedeeVanGasse澄清:您的bootclasspath仍然需要指向以前JDK的rt.jar。因此,虽然可以在JDK1.8上运行它,但仍然需要JDK1.6中的rt.jar,然后指向它。不幸的是。