2012-09-24 121 views
6

我可以用Eclipse製作一個可執行的jar文件。假設它叫做ast.jar,而Main類是ASTExplorer。我可以驗證這是否適用於java -jar ast.jareclipse後面的魔法生成可執行jar文件

然後,我將jar文件解壓到一個單獨的目錄中,並驗證ASTExplorer是否在astexplorer目錄中。但是當我執行這個命令java -cp . astexplorer.ASTExplorer我得到這個錯誤。

java -cp . astexplorer/ASTExplorer 
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 

問題是jar文件中沒有org/eclipse/swt目錄。

Directory screenshot

什麼是可執行的JAR文件背後的魔力?解壓縮時爲什麼不運行?

+0

你應該嘗試用螞蟻創造你的JAR,而不是蝕食黑魔法。 –

+0

你是什麼類路徑,當你運行'Java的罐子ast.jar'。當你解壓jar文件時,你的類路徑是'.'。我猜測有一個環境變量CLASSPATH設置爲允許'java -jar ast.jar'工作。 – km1

回答

2

當Eclipse包運行的JAR,它包括依賴關係嵌套的jar文件,並且還包括懂得如何找到嵌套罐類特殊的類加載器。它只適用於嵌套罐,當你提取一切,你阻止它的工作。

我看着在Eclipse生產運行的JAR,這裏就是我想你需要做的:

  1. 一切解壓到一個目錄。依賴罐子在頂層目錄
  2. 刪除組織/日蝕/ JDT /內部目錄
  3. 從頂層目錄中

    java -cp .;dep-jar;dep-jar;... your.main.class

運行主類提取

我試圖用一個可運行的jar,我恰好躺在它周圍,它的工作原理。第2步不是絕對必要的。

+0

我可以使它執行使用-cp:所有的jar文件從ECLIPSE main.class。我覺得似乎比它包裹起來其他日食生成可執行的JAR文件背後沒有大魔做出的jar文件自動 – prosseek

+1

加代在mainfest文件中的「jarinjar」類加載器的參考。 –

相關問題