2011-09-22 36 views
2

我看到一個問題,其中由Maven構建的給定源文件生成的類文件與Eclipse構建的文件不同。與m2Eclipse和Maven不兼容的Eclipse構建器

Eclipse的生成器優化掉下面的方法:

public SomeClass clone() { 
    SomeClass clone = (SomeClass) super.clone(); 
    return clone; 
} 

這種方法顯然是不必要的,但我沒有,因爲它產生改變源的選項。

Eclipse使用哪種構建器來編譯這些類?我使用的m2Eclipse插件,我認爲只是調用Maven來執行構建。爲什麼Eclipse後來認爲需要使用不同的構建器來執行另一個構建?我可以禁用此Eclipse構建器還是將其配置爲阻止優化?

  • Eclipse版本:3.7
  • m2eclipse的版本:1.0.100.20110804-1717(配置爲使用外部的Maven)
  • Maven的版本:2.2.1

更新

我發現了一個描述發生了什麼的Eclipse bug report。爲了澄清,它實際上並不是Eclipse編譯器正在刪除任何內容,它只是沒有引入標準JDK編譯器引入的合成「橋」方法。錯誤報告被標記爲「已解決 - 不會修復」。

我還沒有找到阻止Maven構建器運行後運行Eclipse構建器的方法。但我們的修復方法是修改代碼生成器以將顯式serialVersionUID添加到生成的代碼中。

回答

1

如果爲項目配置,您可以嘗試禁用Java Builder。您可以通過點擊Project - >Properties中的Builders選項卡來檢查。

從Eclipse幫助...

Java的生成器生成使用自己的編譯器(在 Eclipse的Java編譯器)實現Java語言 規範的Java程序。

+0

感謝您的建議。不幸的是,禁用Java Builder會導致來自其他Java項目的工作區解析的其他問題。 –

1

我沒有Eclipse 3.7,但我預計這些事情自從3.6以來沒有改變。如果你在你的項目上打開屬性 - >生成器,你應該看到Maven Builder最後一次,或者至少在Java Builder之後。這意味着當Maven Builder看到你的Java源文件時,它們已經被編譯。順便說一句,您配置的外部Maven只在執行Run as - >時使用,而不是在使用Maven構建時使用。

所有這一切都是說,你看到的可能是這樣的事實,即當你從Eclipse內部編譯內部Java編譯器時,當你從命令行運行Maven時,我期望使用JDK編譯器,這取決於你已經安裝了什麼。我不認爲你可以做任何改變這種狀況的事情。有一兩件事你可以嘗試,是確保他們的行爲是儘可能接近通過在POM指定哪些J​​ava版本都符合加入類似

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

到您的構建部分。

我不得不說,我期望Java編譯器不允許從類中刪除公共方法,即使它們沒用。

+0

感謝您的反饋@Nicola。我們有你提到的插件配置。我發現了一些針對Eclipse報告的錯誤信息。查看我對原始問題的更新。 –