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

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

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

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

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

【问题讨论】:

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

标签: java maven


【解决方案1】:

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

【讨论】:

【解决方案2】:

您需要将maven-compiler-plugin 配置为使用1.6 个source 和target 参数(默认为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>

【讨论】:

    【解决方案3】:

    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;,那么您也需要检查它(递归地)。

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

    【讨论】:

    • 如果您不想简单地使用路径中的javac,如何设置编译器 的示例:JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 mvn clean install。您的里程可能会因 Maven 下的覆盖方式/时间而异。
    • 作为最终的健全性检查,您可以在构建环境中询问javac/java,方法是设置构建参数以将-version 添加到命令行参数——类似于@ 987654323@(用于 Gradle)。
    • 请记住,JAVA_HOME 可能已经在您的环境中设置——覆盖PATH 变量。
    • 这似乎很重要,如果它不是那么荒谬的话:maven.apache.org/enforcer/enforcer-rules/…
    【解决方案4】:

    【讨论】:

    • 不是我真正想要的。如果您阅读我的链接,实际错误是其中一个依赖插件中的 NoSuchMethodError,它与 maven 编译器插件无关。
    猜你喜欢
    • 2014-11-11
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2015-04-15
    相关资源
    最近更新 更多