我们有一个Jenkins作业,它被配置为使用JDK7。在检查日志时,我注意到以下错误:
ERROR: Invalid project setup: jenkins/security/MasterToSlaveCallable : Unsupported major.minor version 52.0
ERROR: [JENKINS-18403][JENKINS-28294] JDK 'JDK 1.7.0_45' not supported to run Maven projects.
ERROR: Maven projects have to be launched with a Java version greater or equal to the minimum version required by the master.
ERROR: Use the Maven JDK Toolchains (plugin) to build your maven project with an older JDK.
ERROR: Retrying with slave Java and setting compile/test properties to point to /usr/java/jdk1.7.0_45/.
经过一些谷歌搜索后,似乎Job和Jenkins本身之间存在一些互动。由于Jenkins以JDK8开始,而Job with JDK7,因此似乎产生了这个错误。构建是可以的,因为Jenkins然后继续使用JDK8构建。但我们实际上希望用1.7构建。
所以问题是: 如果我们使用JDK8启动Jenkins,如何在没有此错误的情况下使用JDK7编译Jobs?
答案 0 :(得分:2)
这显然是Jenkins插件Maven Integration的技术限制。
因为在Jenkins master和Maven Jobs之间交换java序列化类,所以要求用于启动Maven的JVM优于或等于为其构建Jenkins Master的Java版本。
我怀疑你的Jenkins版本太近了,需要JDK版本> = 8 由于所需的版本是7,你可以使用java 7或8 - 甚至是9.所以即使你的Jenkins是用Java8启动的,你的构建也会成功使用Java7。
您可以降级Jenkins安装,或将所有构建移动到Java8。
干杯
答案 1 :(得分:2)
要在 Jenkins> = 2.54 上使用 Java 1.7 ,您需要在自由式项目中转换 Maven项目 。在自由式项目中,您可以指定 JDK 版本。这是因为从版本 2.54 开始, Jenkins 已升级为使用 Java 8 。
来自Jenkins release notes:
在Java 7中使用Maven项目类型
使用“Maven项目”类型配置作业的用户可能不是 能够将Java 7用于他们的Maven作业。正确的行为不是 保证所以请自担风险。 Maven项目使用Jenkins Remoting在Maven可执行文件中建立“拦截器”。 因此,Maven使用Remoting和其他Jenkins核心类, 并且此行为可能会破坏更新
您还可以看到here如何创建自由式项目
答案 2 :(得分:1)
交互是基于Jenkins将尝试了解有关完成单个模块以及是否存在创建工件和其他一些内容的信息。这是由Jenkins中的EventSpy实现处理的。这可能导致这样的问题。
答案 3 :(得分:1)
您可能知道Jenkins> = 2.54需要Java 8,因此必须使用Java> = 8启动Maven作业
除此之外,错误消息引导您:
使用Maven JDK工具链(插件)构建您的maven项目......
使用该插件将帮助您使用java 8运行jenkins作业,并使用声明的java 7编译项目文件。
我遇到了同样的问题并以这种方式解决了。
您可以在this Answer上查看更多详情。