2012-03-22 92 views
0

所以我編寫了一個主類方法,它依賴於另一個依賴於許多jar文件的jar文件。爲了簡單起見,我使用了One-JAR並創建了一個可執行的jar。 我創建的JAR是好的,我可以運行它:Eclipse無法識別我使用One-JAR創建的jar

java -jar foo.jar 

這成功地執行我的主要應用。

接下來,我在Eclipse中創建了一個新項目,並通過「添加外部罐子」(我一直這樣做,它始終工作)將foo.jar添加到構建路徑。出於某種原因,在我的Eclipse項目中,它抱怨說它無法識別foo.jar的軟件包導入。

我查看了以前關於Eclipse上jar問題的問題,但沒有任何幫助。我懷疑這與One-Jar創建的樹有關,但由於命令行中的「java -jar foo.jar」工作正常,我不明白爲什麼Eclipse沒有看到類文件。

謝謝!

更新: 這裏有一個-JAR創建了foo.jar中看起來像:

META-INF  OneJar.class com   doc   lib   main 

內主:

main  main.jar 

內部這個主要我與應用程序的包樹。類文件。現在,如果我在Eclipse中包含「main.jar」,它確實可以識別我的應用程序。但後來它不能識別lib /下的其他依賴項,因此它會引發運行時異常。

更新2: 所以One-jar和Eclipse的問題沒有解決,但有人提到了這個fat jar Eclipse插件,所以我嘗試了它,它完成了這項工作。它生成的jar與Eclipse和Maven一起工作。他們實際上也支持One-Jar,你可以在創建jar時檢查One-Jar選項。我沒有使用它,但它在那裏(如果它工作,它實際上值得使用,因爲它應該照顧圖書館衝突)。 感謝您的幫助。

+0

one-jar創建的jar只是一個包含類的jar。 – 2012-03-22 16:53:21

+0

對。但是讓我們說我的包是com.example.main,然後它將.class文件放在:main/main/com/example/main/ – user247866 2012-03-22 16:57:11

+1

哦,我明白你在說什麼。我認爲這樣做是爲了避免衝突,類似於陰影的工作方式 - 不確定單個罐子是否具有非束縛選項。 – 2012-03-22 17:27:28

回答

0

Eclipse不會理解罐子裏面的罐子。包括其他罐子分開建立路徑會更好。

+0

試圖包含foo.jar和main.jar,它們編譯但由於其他jar依賴項而在運行時無法工作。我可以單獨添加所有其他的罐子,這將工作,但我試圖避免它。這就是爲什麼我使用One-Jar,它可以通過命令工作,而不是通過Eclipse。 – user247866 2012-03-22 17:20:03

+0

好的,有什麼具體的原因,你想避免它。因爲這是向構建路徑添加依賴jar的常用方法。如果你想把所有的東西都捆綁成一個jar文件,那麼你可以解壓所有的類文件並將它們捆綁到一個jar文件中。它可能聽起來很愚蠢:)。但我想不出其他方式...... – tsatiz 2012-03-22 17:37:28

+1

使用單個罐子更方便,而且更容易將其運送給其他人。而且,One-Jar應該解決依賴衝突(例如,我的應用程序使用公共庫3.4,而我依賴的其中一個庫使用commons 2.4)。一罐應該能夠遮蔽這一點。 – user247866 2012-03-22 17:44:20