2010-10-14 151 views
1

Eclipse如何來編譯我的項目(自動)建立不同的沒有錯誤,但是當我運行Ant build.xml文件 - >編譯目標,構建失敗,編譯錯誤:螞蟻在Eclipse

<MyClass> is not abstract and does not override abstract method <someMethod> 

我明白這一點錯誤消息,但它似乎並非如此,因爲1)Eclipse顯示沒有錯誤2)將此項目部署到服務器成功,並且該類可以正常工作。

那麼這個問題怎麼可能呢?

+1

顯示您的代碼!告訴我們您使用的JDK和Eclipse的版本! – nanda 2010-10-14 07:53:51

+0

並創建一個帳戶!這使得人們更有可能給你有用的答案,如果你已經接受了其他答案,情況更是如此。 – Daniel 2010-10-14 07:56:00

回答

2

您是否像使用Lombok一樣使用Eclipse的某些特殊擴展(可能是爲您生成的某些擴展)? 你是否使用了一些特殊的框架(可能是框架爲你生成一些類)?

您還需要了解的是使用不同編譯器的Eclipse和Ant。 Eclipse有自己的編譯器,它的行爲與Sun JDK或某些版本的Sun JDK有所不同。這種行爲的一個例子可以閱讀here。但在我得出這個結論之前,我會檢查我在Eclipse上的所有配置。

0

因爲Eclipse編譯器存在細微的差異。我也發現了一個錯誤,Javac拋出了一個(恕我直言)愚蠢的錯誤,而Eclipse編譯器能夠像預期的那樣編譯它。提示:Eclipse使用不同的編譯器(它自己的),因爲它需要一個在鍵入時爲增量構建進行優化的編譯器。

創建一個測試用例,顯示差異是真實的,並將其發送給eclipse團隊。他們會調整編譯器的行爲。然而,我不能相信像未實現的方法這樣的重大錯誤真的存在於Eclipse編譯器中。因此,我假設你在爲你創建一個測試用例的時候發現了你的設置中的錯誤。

1

您的Ant構建版本也可能與您的Eclipse構建版本不同。不同的源文件夾,不同的JAR等。例如,也許您的Eclipse構建引用舊版本的第三方JAR,並且您的Ant構建引用了新的版本,其中新的抽象方法已添加到您從其繼承的類。

0

謝謝大家的快速解答。瞭解Eclipse使用不同的編譯器非常有幫助,它解釋了很多。

至於我的問題 - 我認爲Java編譯器是正確的,並且構建實際上有錯誤。仔細研究之後,它發生了舊版本的Apache Commons DBCP與Java 1.6的不兼容問題。我確定我正在使用最新版本並諮詢了錯誤的文檔版本,其中說明了所需的方法已經實施。

現在至於Eclipse。這個錯誤實際上很棘手。我設法寫了一個測試案例來顯示這個錯誤。我使用Java 1.6和Eclipse Helios for Java EE。我在Eclipse中創建了一個Java項目並添加了

com.springsource.org.apache.commons.pool-1.5.3.jar com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar

添加到類路徑(從SpringSource存儲庫下載這些JAR)。如您所見,Apache Commons DBCP是舊的。 Java 1.6需要版本1.4+。

在我的測試項目中,我擴展了org.apache.commons.dbcp.BasicDataSource並另外聲明它應該實現javax.sql.DataSource。像這樣:

import org.apache.commons.dbcp.BasicDataSource; 
import javax.sql.DataSource; 

public class MyDataSource extends BasicDataSource implements DataSource { 

} 

這裏比較棘手的部分是BasicDataSource實現了DataSource接口。但在1.6版本中這個接口得到了擴展,所以新的方法沒有實現。明確再次添加「實現DataSource」應該導致錯誤,Java編譯器成功報告。但是Eclipse在沒有任何警告的情況下編譯這些代碼,甚至可以運行。

所以這就是問題所在。看起來像Eclipse中的一個bug對我來說。

+0

很好,你已經解決了這個問題。如果您使用Java 1.6,請再次檢查Eclipse項目屬性中的類路徑。 – nanda 2010-10-15 08:39:16

+0

沒有太多要檢查。我只安裝了Java 1.6並通過項目屬性窗口添加這些JAR。你覺得這是什麼,它的Eclipse的錯誤? – Infeligo 2010-10-15 10:36:30

+0

好吧,所以我用更簡單的測試用例填充了錯誤報告:https://bugs.eclipse.org/bugs/show_bug.cgi?id = 327881 – Infeligo 2010-10-15 12:41:41