Eclipse如何來編譯我的項目(自動)建立不同的沒有錯誤,但是當我運行Ant build.xml文件 - >編譯目標,構建失敗,編譯錯誤:螞蟻在Eclipse
<MyClass> is not abstract and does not override abstract method <someMethod>
我明白這一點錯誤消息,但它似乎並非如此,因爲1)Eclipse顯示沒有錯誤2)將此項目部署到服務器成功,並且該類可以正常工作。
那麼這個問題怎麼可能呢?
Eclipse如何來編譯我的項目(自動)建立不同的沒有錯誤,但是當我運行Ant build.xml文件 - >編譯目標,構建失敗,編譯錯誤:螞蟻在Eclipse
<MyClass> is not abstract and does not override abstract method <someMethod>
我明白這一點錯誤消息,但它似乎並非如此,因爲1)Eclipse顯示沒有錯誤2)將此項目部署到服務器成功,並且該類可以正常工作。
那麼這個問題怎麼可能呢?
您是否像使用Lombok一樣使用Eclipse的某些特殊擴展(可能是爲您生成的某些擴展)? 你是否使用了一些特殊的框架(可能是框架爲你生成一些類)?
您還需要了解的是使用不同編譯器的Eclipse和Ant。 Eclipse有自己的編譯器,它的行爲與Sun JDK或某些版本的Sun JDK有所不同。這種行爲的一個例子可以閱讀here。但在我得出這個結論之前,我會檢查我在Eclipse上的所有配置。
因爲Eclipse編譯器存在細微的差異。我也發現了一個錯誤,Javac拋出了一個(恕我直言)愚蠢的錯誤,而Eclipse編譯器能夠像預期的那樣編譯它。提示:Eclipse使用不同的編譯器(它自己的),因爲它需要一個在鍵入時爲增量構建進行優化的編譯器。
創建一個測試用例,顯示差異是真實的,並將其發送給eclipse團隊。他們會調整編譯器的行爲。然而,我不能相信像未實現的方法這樣的重大錯誤真的存在於Eclipse編譯器中。因此,我假設你在爲你創建一個測試用例的時候發現了你的設置中的錯誤。
您的Ant構建版本也可能與您的Eclipse構建版本不同。不同的源文件夾,不同的JAR等。例如,也許您的Eclipse構建引用舊版本的第三方JAR,並且您的Ant構建引用了新的版本,其中新的抽象方法已添加到您從其繼承的類。
謝謝大家的快速解答。瞭解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對我來說。
顯示您的代碼!告訴我們您使用的JDK和Eclipse的版本! – nanda 2010-10-14 07:53:51
並創建一個帳戶!這使得人們更有可能給你有用的答案,如果你已經接受了其他答案,情況更是如此。 – Daniel 2010-10-14 07:56:00