为什么maven使用maven-compiler-plugin 2.0.2而不是3.0?

时间:2014-12-22 14:10:16

标签: maven

我试图建立一些maven项目。它失败了因为maven使用了较旧的java 1.3,而且项目正在使用泛型。我知道我可以覆盖maven-compiler-plugin版本以及源和目标,但这不是重点。

重现的步骤

$ git clone https://github.com/DuLerWeil/netty-diameter && cd netty-diameter
$ mvn help:effective-pom
...
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.0.2</version>
        <executions>
          <execution>
            <id>default-testCompile</id>
            <phase>test-compile</phase>
            <goals>
              <goal>testCompile</goal>
            </goals>
          </execution>
          <execution>
            <id>default-compile</id>
            <phase>compile</phase>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

我的设置:

$ mvn -v
Apache Maven 3.0.5
Maven home: /usr/share/maven
Java version: 1.7.0_72, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-oracle/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.16.0-28-generic", arch: "amd64", family: "unix"
$ printenv JAVA_HOME
/usr/lib/jvm/java-7-oracle
$ readlink -f $(type -p java)
/usr/lib/jvm/java-7-oracle/jre/bin/java
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.10
Release:    14.10
Codename:   utopic

1 个答案:

答案 0 :(得分:0)

您的JAVA_HOME需要指向JDK而不是JRE。 JDK是Java开发环境,只有这个包含javac可执行文件(编译器)。 maven编译器插件使用javac编译器 - 它本身不是编译器。

编译器插件也有一些配置来定义java版本。见&#34;来源&#34;和&#34;目标&#34;在 http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html

可以在此处找到一个用法示例:http://maven.apache.org/plugins/maven-compiler-plugin/usage.html - 您可以删除执行配置 - 因为它看起来像默认值。