即使指定了1.5,Maven也会使用Java 1.6构建项目

时间:2012-07-04 09:09:46

标签: java eclipse maven

  

可能重复:
  Java version mismatch in Maven

我有一个配置为使用带有maven的Java 1.5的项目:

mvn help:effective-pom

...
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.0.2</version>
    <configuration>
      <source>1.5</source>
      <target>1.5</target>
    </configuration>
...

我的机器安装了Java 1.6,Maven正在使用它:

mvn -v

...
Apache Maven 2.2.1 (r801777; 2009-08-06 20:16:01+0100)
Java version: 1.6.0_21

我已将项目导入Eclipse(使用mvn eclipse:eclipse),并使用Java 1.5构建它,如POM中所指定。

现在,如果我使用@Override标记了一个接口实现方法,这在Java 1.5中是不允许的,但在Java 1.6中是受支持的,那么Maven将构建项目而不会出现错误,但Eclipse会将注释标记为编译时错误并拒绝建立项目。

如何让Maven真正使用Java 1.5编译项目,或者让Eclipse使用与Maven相同的设置编译项目?

1 个答案:

答案 0 :(得分:1)

似乎JDK 1.5的新版本忽略@Override,如果它在接口实现方法中:https://stackoverflow.com/a/2336850/256245我猜JDK 1.6如果使用目标1.5进行编译则会做同样的事情。这就是Maven不抱怨的原因。

要检查Maven是否真的编译为Java 1.5,您应该使用Animal Sniffer Plugin

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>animal-sniffer-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>check-java15-sun</id>
            <phase>test</phase>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <signature>
                    <groupId>org.codehaus.mojo.signature</groupId>
                    <artifactId>java15-sun</artifactId>
                    <version>1.0</version>
                </signature>
            </configuration>
        </execution>
    </executions>
</plugin>

由于Eclipse有自己的编译器实现,我猜你必须从接口实现方法中删除@Override注释才能让他满意。由于JDK忽略了注释,因此删除不会造成任何伤害。