如何确定并更改用于执行的 Java Maven 版本?

Posted

技术标签:

【中文标题】如何确定并更改用于执行的 Java Maven 版本?【英文标题】:How do I figure out and change which version of Java Maven is using to execute? 【发布时间】:2011-10-25 08:48:49 【问题描述】:

在运行我们的 Maven 构建时,我团队的一名成员在执行时遇到错误。但是,当我们从她的命令行运行java -version 时,它指示Java 1.6.0_26。该错误显然是在尖叫 Maven 正在使用 Java 5。

如何确定和更改 Maven 使用的 Java 版本?

3 个潜在的重要注意事项:

    这是在命令行中执行的,而不是使用 Eclipse 插件 JAVA_HOME 设置为 Java 1.6 JDK 使用 Maven 2.2.1

【问题讨论】:

似乎 JDK 1.6.0_26 用于使用 1.5 编译您的源代码。这是可能的! 哎呀! :(“此错误”链接已损坏 【参考方案1】:

看这里:http://www.MacAdie.net/2011/07/10/adding-some-xml-to-netbeans-pom-files/

【讨论】:

不是我真正想要的。如果您阅读我的链接,实际错误是其中一个依赖插件中的 NoSuchMethodError,它与 maven 编译器插件无关。【参考方案2】:

mvn -version 将输出它正在使用的 java。如果 JAVA_HOME 设置为有效的 JDK 目录并且 Maven 正在使用其他东西,那么很可能有人篡改了 Maven 的启动方式。

【讨论】:

您可以定义要与 maven 一起使用的 Java。见帖子:***.com/questions/18813828/…【参考方案3】:

您需要将maven-compiler-plugin 配置为使用1.6 个sourcetarget 参数(默认为1.5)。

这是在<pluginManagment> 部分的项目父 pom 中完成的最好的方法(当然,您始终可以为每个单独的项目配置它)。

  <build>

    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.3.2</version>
          <configuration>
            <source>1.6</source>
            <target>1.6</target>

          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

【讨论】:

【参考方案4】:

mvn -version 告诉您 Maven 正在使用什么编译器,因此这回答了问题除非您的 POM 为要使用的版本指定了覆盖值。

这是在pom.xml 中指定覆盖的最简单方法:

<properties>
    <maven.compiler.target>1.9</maven.compiler.target>
    <maven.compiler.source>1.9</maven.compiler.source>
</properties>

另外,maven-compiler-plugin 可以更明确地指定。在这种情况下,请查看与插件关联的 &lt;source&gt;&lt;target&gt; 值。

这两个选项都被描述为here。

如果您的 POM 有 &lt;parent&gt;,那么您也需要检查它(递归地)。

注意:当指定sourcetarget 时,这些值将作为命令行选项传递给编译器。使用此功能,您可以针对比编译器标称值更早的 Java 版本进行编译或运行。

【讨论】:

如果您不想简单地使用路径中的javac,如何设置编译器 的示例:JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 mvn clean install。在 Maven 下如何/何时覆盖您的里程可能会有所不同。 作为最终的健全性检查,您可以在构建环境中询问javac/java,方法是设置构建参数以将-version 添加到命令行参数——类似于@ 987654323@(用于 Gradle)。 &lt;java.version&gt; in pom.xml 与此无关:Specifying java version in maven - differences between properties and compiler plugin 请记住,JAVA_HOME 可能已经在您的环境中设置——覆盖PATH 变量。 这似乎很重要,如果它不是那么荒谬的话:maven.apache.org/enforcer/enforcer-rules/…

以上是关于如何确定并更改用于执行的 Java Maven 版本?的主要内容,如果未能解决你的问题,请参考以下文章

错误:未正确定义 JAVA_HOME 执行 maven

如何在 maven pom.xml 中更改 shell 脚本输出以使用

如何使用 Maven 发布插件更改其他项目?

Wix Toolset CustomAction 用于确定操作系统是 windows 7/xp 家庭版还是入门版,并显示消息不是

如何在 IntelliJ 中更改 Maven 的 Java 版本?

如何从 Java 程序调用 Jenkins 中的“执行 Maven 发布”?