2013-01-02 42 views
3

我使用Maven構建和得到一個看似無害的「符號未找到」錯誤 - 問題是我驗證過的版本是正確的所有我知道的較低級別的Java工具,它看起來不透氣。我已經使用此命令行建:的Java找不到符號錯誤,即使已經驗證的classpath和.class文件用javap的

javac -d /home/dan/EmailClient/Initial-Client/target/classes -classpath <many jars>: 
/thepath/Common/1.0-SNAPSHOT/Common-1.0-SNAPSHOT.jar /* I need this one */ 
-sourcepath /thepath/src/main/java: <the files> 
-s /thepath/target/generated-sources/annotations 
-g -nowarn -target 1.7 -source 1.7 -encoding UTF-8 

得到這個錯誤:

Launcher.java:119: error: cannot find symbol 
    return Promise.onPool(getterPool).continueWith(new Transformer<Void, Promise<List<Void>>>() { 

(有誤差指着onPool

並已通過複製運行jar xf Common-1.0-SNAPSHOT.jarcd ING和粘貼目錄在命令行中),然後

javap Promise.class 

這表明

public static me.unroll.functional.Promise<java.lang.Void> onPool(java.util.concurrent.Executor); 

所以這看起來密不透風,我 - 什麼調試一步我缺少什麼?

而且這將構建一個單獨的機器上罰款和運行良好的Eclipse中打開,只是沒有從我的實際構建機器所有相關的源文件。

+0

也許愚蠢的問題,但是是類型Executor的getterPool?如果不是,那麼它可能會抱怨,因爲它無法找到一個onPool,它接受任何與「getterPool」匹配的參數類型。 –

+0

@ChrisKessel是的,它是 - 而不是發佈更多的源代碼,我只是編輯注意到Eclipse接受一切建設的罰款。 – djechlin

回答

2

我建議你檢查你的類路徑中的<many jars>部分,你很可能會在那裏找到你的Maven構建的jar的老版本,它正在贏得類名解析遊戲。

+0

我grepped groupId我所有的代碼使用,並發現4個罐子。我驗證了包含'Promise'類的唯一一個預期。 – djechlin

+0

假;我在錯誤的機器上做到了這一點,這是問題所在。 – djechlin