2

可能重复:
Maven 中的 Java 版本不匹配

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

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 相同的设置来编译项目?

4

1 回答 1

1

似乎较新版本的 JDK 1.5 忽略了@Override它是否在接口实现方法中:https ://stackoverflow.com/a/2336850/256245我猜如果使用目标 1.5 编译 JDK 1.6 也会这样做。这就是 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 忽略了注释,因此删除不会造成任何损害。

于 2012-07-04T15:36:06.503 回答