2012-07-04 50 views
2

可能重複:
Java version mismatch in Maven的Maven構建與Java 1.6的項目,即使指定了1.5

我有被配置爲使用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),並且正在使用POM中指定的Java 1.5構建它。

現在,如果我將網絡接口實現方法與@Override,這是在Java 1.5中不允許的,但在Java 1.6的支持,那麼Maven會建立一個沒有錯誤的項目,但是Eclipse將迎來註釋作爲編譯時錯誤和拒絕建立這個項目。

如何讓Maven真正用Java 1.5編譯項目,或者讓Eclipse使用與Maven相同的設置來編譯項目?

+3

最新的編譯器插件是2.5.1 – artbristol

+2

http://stackoverflow.com/a/11138745/739090有幫助嗎? – Crollster

+0

嘗試使用m2e插件而不是使用'maven-eclipse-plugin'並查看是否有區別。 http://wiki.eclipse.org/M2E_FAQ#Maven_Integration_for_Eclipse_vs._Maven_eclipse:eclipse_plugin – maba

回答

1

看來,新版本的JDK 1.5忽略@Override,如果它在接口實現方法中:https://stackoverflow.com/a/2336850/256245我猜如果使用目標1.5編譯JDK 1.6,它會執行相同的操作。這就是Maven不會抱怨的原因。

要檢查是否Maven是真的編譯成Java 1.5,你應該使用Animal Sniffer Plugin

​​

由於Eclipse有它自己的編譯器實現,我想你將不得不刪除接口的實現方法@Override註釋讓他開心。由於JDK忽略註解,刪除不會造成任何傷害。

+0

奇怪的是,添加對NavigableMap的引用不會在Maven或Eclipse中產生編譯器錯誤。感謝您的鏈接,我會看看我是否可以更新Eclipse正在使用的Java 1.5。 – Rich

+0

我的關於NavigableMap的壞處。驗證Java 1.5兼容性的正確方法是使用Animal Sniffer Plugin。我編輯了答案來反映這一點。 –

相關問題