【问题标题】:Maven builds with wrong JDK on jenkinsMaven 在 jenkins 上使用错误的 JDK 构建
【发布时间】:2016-08-05 22:48:52
【问题描述】:

当我尝试运行我的 Jenkins Maven 作业时,我收到以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project myProject: Fatal error compiling: invalid target release: 1.8 -> [Help 1]

这表明 Maven 使用 Java 1.8,但它应该使用 Java 1.7。

我在调试模式下运行 Maven,它显示了正确的版本:

...
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 14:51:28+0100)
Maven home: /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven305
Java version: 1.7.0_71, vendor: Oracle Corporation
Java home: /var/lib/jenkins/tools/hudson.model.JDK/JDK_7u71/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.8.0-44-generic", arch: "amd64", family: "unix"
...

Jenkins 服务器使用 Java 1.8 运行

...
$ java -version
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
...
$ javac -version
javac 1.8.0_74
...

我尝试使用一个空的 Maven 存储库运行该作业,并准确告诉 Maven 要使用哪个版本,但没有成功。

我这样称呼 Maven:

mvn clean install -X -DskipTests -Dmaven.repo.local=../testrepo -Djava.version=1.7

我是不是做错了什么?

【问题讨论】:

  • 您是否尝试过在我们的 POM 文件中为编译器插件显式指定 Java 1.7?
  • @CptBartender 不,我会试试的。
  • @CptBartender 还是同样的错误。

标签: java maven jenkins


【解决方案1】:

尝试以下步骤:

1) 转到管理 Jenkins -> 配置系统

2) 在 Global Properties -> Environment Variables 中添加 JAVA_HOME 及其路径

3) 在JDK部分添加JDK和路径

如果没有,请尝试关注这篇文章,因为这里提供了很多解决方案:Maven uses an incorrect Java version when it is executed by Jenkins

【讨论】:

  • 我已经尝试了另一个问题中提到的解决方案,但没有任何效果。此外,我无法更改全局变量,因为 Jenkins 服务器也被其他需要其他 Java 版本的项目使用。
【解决方案2】:

正确的解决方案是将所需的JDK添加到Jenkins全局配置中,然后在项目构建配置下专门选择所需的JDK版本/安装。

首先将所需的 JDK 复制到您的构建机器。然后打开 Jenkins 配置并滚动到“JDK”部分 [Jenkins -> Manage Jenkins -> Configure System]。将所需的 JDK 添加到 Jenkins。下图是 Jenkins 配置两个不同 JDK 的示例。

现在在项目配置 [YourProject -> Configure] 下,将提供一个新选项。您可以选择所需的 JDK 来构建项目,如图所示:

“(默认)”图中的JVM是指Jenkins运行的JDK。简单的解决方法是将此 JDK 更改为项目所需的版本(通过更改 Jenkins 启动脚本或使用 JAVA_HOME)。这将起作用。但是,一旦您需要构建两个或更多冲突的项目,无论如何您都需要配置多个 JDK。

通过使用类似的步骤,您可以将多个 maven 安装添加到您的 Jenkins 服务器。

【讨论】:

  • 不要忘记将源/目标版本值添加到 pom.xml
  • 在这种情况下:Project=Job
【解决方案3】:

我终于发现了问题所在。

我在我的构建中使用了另一个模块,该模块是从 nexus 服务器下载的。有人犯了一个错误,将一个版本上传到了与版本控制下的不同步的版本。 nexus 上的版本指定了 Java 1.8,但版本控制下的版本具有 Java 1.7,所以我之前没有注意到。

感谢大家的精彩回答。

【讨论】:

    【解决方案4】:

    在 Jenkins 2.7.3(可能还有以后)中,菜单导航略有不同:

    1) 管理 Jenkins

    2) 全局工具配置

    3) JDK 部分

    4) 按“JDK 安装”按钮

    5) 有JDK选项和路径

    【讨论】:

      【解决方案5】:

      从 Jenkins 2.60.1(2017 年 6 月)LTS 开始,maven 作业需要 JDK 1.8 或更高版本。 只有 maven 工作需要这个,其余的(例如 freestyle 的)可以修复最适合他们需求的 jdk 版本。

      LTS Changelog:

      2.60.1 是第一个需要 Java 8 才能运行的 Jenkins LTS 版本。如果您使用的是 Maven Project 类型,请注意它需要 使用能够运行 Jenkins 的 JDK,即 JDK 8 或更高版本。如果你 在 Maven 项目中配置较旧的 JDK,Jenkins 将尝试 找到更新的 JDK 并自动使用它。

      Compatibility Notes

      在 Java 7 中使用 Maven 项目类型

      作业配置为“Maven 项目”类型的用户可能不会 能够将 Java 7 用于他们的 Maven 工作。正确的行为不是 保证,因此您自担风险。 Maven 项目使用 Jenkins 远程处理在 Maven 可执行文件中建立“拦截器”。 正因为如此,Maven 使用 Remoting 和其他 Jenkins 核心类, 这种行为可能会破坏更新。

      【讨论】:

        猜你喜欢
        • 2013-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-19
        • 1970-01-01
        • 2013-05-19
        • 2013-02-21
        • 2015-09-01
        相关资源
        最近更新 更多