【问题标题】:Set Mavens Java Version设置 Mavens Java 版本
【发布时间】:2016-03-01 09:14:17
【问题描述】:

我们正在尝试将所有系统升级到 jdk1.8.0_66,包括 maven(在 jenkins 上运行)。

[jenkins@zldinfra1 jvm]$ mvn -version
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 14:51:28+0100)
Maven home: /opt/apache-maven-3.0.5
Java version: 1.6.0_24, vendor: Sun Microsystems Inc.
Java home: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-279.5.2.el6.centos.plus.x86_64", arch: "amd64", family: "unix"
[jenkins@zldinfra1 jvm]$ echo $JAVA_HOME
/opt/java
[jenkins@zldinfra1 jvm]$ file /opt/java
/opt/java: symbolic link to `jdk1.8.0_66'

所有快速谷歌导致我应该将我的JAVA_HOME 更改为所需的 Java 版本。如上所示,它设置为jdk1.8.0_66,但 Maven 使用的是完全不同的路径。

问题: 如何更改maven的JAVA_HOME

编辑:

在@Rottens 回答之后,我设法让 maven 运行 jdk1.8.0_66,将 maven 的 JAVA_HOME 设置为 /opt/jdk1.8.0_66/jre

但是,我在尝试部署时仍然收到以下错误(构建工作正常):

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project deployTest: Fatal error compiling: invalid target release: 1.7

在 POM 中编译插件设置如下:

<plugin>
    <inherited>true</inherited>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>${maven.compiler.plugin.version}</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

在我的 Jenkins 项目配置中,我指定它使用 default JDK 和 Maven Version 3.2.1

刚刚注意到:

Maven 版本 3.0.5(我配置为使用 1.8)没有出现在 Jenkins 中。 Jenkins 中出现的版本是3.2.13.1.13.0.4

【问题讨论】:

  • 您是否检查了/private/etc/mavenrc~/.mavenrc 是否覆盖了 JAVA_HOME 设置?
  • mvn --v 的输出是什么?
  • Maven是否也使用同一个用户jenkins?很有可能JAVA_HOME 为您的 Maven 用户设置了不同的设置。
  • @Patrick mvn --v 输出与 mvn -version 相同的内容
  • @GergelyBacso 我现在就看看

标签: java linux maven


【解决方案1】:

一定要检查你的 $PATH 环境变量,我总是在我的 .profile 中设置我的 JAVA_HOME,然后在我的 PATH 变量的开头使用它,所以我总是确定我正在使用我选择的 jdk 版本。像这样的东西:

JAVA_HOME=/opt/java/jdk/jdk1.8_65
export JAVA_HOME

PATH=$JAVA_HOME/bin:$PATH
export PATH

【讨论】:

  • 这似乎有点工作。仍然没有编译,但是java版本现在是正确的。
  • @Martin 您的运行时是否也设置为 java 8?
  • @Patrick 根据java -version 设置为1.8.0_66-b17
  • @Martin 我不知道运行时与编译有什么关系。 javac -version 报告什么?
  • @Gimby javac 1.8.0_66。构建现在可以工作,但尝试 Perform Maven Release 仍然让我得到“无效的目标版本:1.7”错误
【解决方案2】:

将系统的 maven 版本从 Apache Maven 3.0.5 更新为 Apache Maven 3.3.x

在您的项目 pom 中进行更改以适应系统:

<plugin>
    <inherited>true</inherited> **//default set to true**
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.0.5</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

【讨论】:

  • 升级到3.3.9后,使用JDK的“默认”选项会产生UnsupportedClassVersionError。如果我明确使用“1.8.0”,则发布成功。
  • 明确为? @马丁
  • 我们的 jenkins 已经(或者更确切地说已经)安装了 jdk1.7 和 jdk1.8。使用“默认”时,它使用 1.8,但失败了。但是,如果您使用“1.8”,它仍然使用相同的 jdk,但成功了。
【解决方案3】:

通过从 Jenkins 卸载 jdk1.7.0 解决了我的问题,只留下了 jdk1.8.0

将每个项目显式配置为使用 jdk1.8.0 也确实有效,但这是出于维护原因而不是我们想要做的。

我不知道为什么让 Jenkins 自动选择 jdk1.8.0 编译不起作用,但这似乎是问题所在。

此外,我将 Maven 本身升级到 3.3.9,并将所有使用的 maven 插件升级到各自的最新版本。这并不影响 Maven 构建。然而,它确实破坏了我们的 ant 构建。

我还升级了 Jenkins 以在 Java 1.8 而不是 1.7 上运行,这没有任何效果(除了使编译时间略微缩短)。

【讨论】:

    猜你喜欢
    • 2014-07-11
    • 1970-01-01
    • 2020-04-12
    • 2021-09-13
    • 2020-11-12
    • 1970-01-01
    • 2020-01-14
    • 2010-12-02
    • 1970-01-01
    相关资源
    最近更新 更多