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


74

运行我们的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编译源代码。这个有可能!
Kasun Gajasinghe 2011年

8
!:(“此错误”链接已断开
Barett

Answers:



10

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

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

  <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>

2

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可以更明确地指定。在这种情况下,请查看与插件关联的<source><target>值。

这两个选项均在此处介绍。

如果您的POM带有<parent>,则还需要检查(递归)。

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


如何设置的一个例子编译器,如果你不想简单地使用javac从您的路径:JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 mvn clean install。关于在Maven下可以覆盖/何时覆盖的里程可能会有所不同。
布伦特·布拉德本

作为最终的健全性检查,您可以在构建环境中通过设置构建参数以添加到命令行参数中来询问javac/ java,这-version类似于此处(对于Gradle)。
布伦特·布拉德本


请记住,这JAVA_HOME可能已经在您的环境中设置了-覆盖PATH变量。
布伦特·布拉德本'18 -4-5

这似乎是它可能是重要的,如果它不是那么可笑:maven.apache.org/enforcer/enforcer-rules/...
布伦特布拉德

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.