2013-04-23 54 views
-1

我正在使用eclipse,並且我需要使用外部庫。例如Jsoup和JXL。java.lang.NoClassDefFoundError。在運行期間未找到類。

現在我到目前爲止所做的是:首先在我的項目文件夾中創建一個「lib」文件夾。之後在eclipse中,單擊項目屬性,Libraries選項卡,添加外部jar並將jar添加到lib文件夾中。

所以這解決了我的編譯問題。現在,當我運行程序(我去項目/ bin並在控制檯執行:JAVA ProgramName中,我得到

java.lang.NoClassDefFoundError: 

我們的測試,我添加了Jar文件到文件夾中的Main.java和現在,我已經能夠運行該程序執行以下操作:我想到的

javac -classpath ./path/to/jar Main.java 
java -classpath ./path/to/jar:. Main 

而且這個工程

所以第一件事就是,我要告訴的java在哪裏可以找到相應的庫。如果這是正確的,我該怎麼辦?

java -cp ???(dont know what to put here) 

但是,我有另一個問題。我正在用計算機編寫這個程序,但是我將在其他可能沒有這些庫的其他程序中使用它。我該如何解決這個問題?

+0

您已被問及類似的問題。您是否嘗試將庫導入應用服務器的類路徑,正如我在此提到的:http://stackoverflow.com/a/16149435/1430055? – 2013-04-23 17:10:10

+0

如何在不將其他庫中的方法複製到其他計算機的情況下調用其他庫類的方法? – 2013-04-23 17:11:18

回答

0

我喜歡用類似下面:

java -cp myjar.jar;lib/*.jar com.foo.bar.MyClass

這不僅增加我的罐子到類路徑,但那些在lib目錄中。

如果你想在另一臺電腦上運行你的jar,你的需要那些jar,你不能只有你的jar。爲什麼不把lib目錄與它一起打包呢?

+0

這可能非常愚蠢,但我在使用-cp命令時遇到了問題。我用你的命令。但它給我一個錯誤。它說權限被拒絕 – Alessandroempire 2013-04-23 16:39:31

0

讓你的程序運行你有兩條路可擔心的jar文件是您的應用程序的依賴關係(如jsoup.jar)約

  1. 的路徑(可以稱之爲LIB)
  2. 的路徑包含您的應用程序的類別目錄(可以調用這個類)

你需要在命令行的一般形式是:

java -cp lib/jsoup.jar:classes Main 

如果您有更多的庫

java -cp lib/jsoup.jar:lib/jxl.jar:classes Main 

包裝上你的應用程序發佈到其他計算機上的備忘。你可能要考慮讓自己的應用程序的罐子,可能是最好的使用http://ant.apache.org/manual/Tasks/jar.html

另一種方法是產生「一個罐子」,這使得一個大罐子做,捆綁在你從庫需要的所有類和你應用中的所有類。然後,您可以將該jar創建爲可執行文件,以開箱即用。看看http://one-jar.sourceforge.net/https://code.google.com/p/jarjar/

+0

我需要做的第一件事是能夠運行它。我在使用java -cp – Alessandroempire 2013-04-23 16:42:20

+0

時遇到問題,能否粘貼您使用的確切命令行? – 2013-04-23 16:43:49

+0

我正在使用:java -cp ../lib/jxl-2.6.jar:classes Main,但它說錯誤:無法找到或加載主類Main – Alessandroempire 2013-04-23 16:47:32

0

,如果你有這樣的結構:

project folder 
... code 
... libs 
從代碼文件夾

則:

javac -cp .;../libs/*.jar yourmainclass.java 
java -cp .;../libs/*.jar yourmainclass 

當您需要編譯並運行這個項目,採取一切文件夾,並在其他機器上做同樣的事情。

+0

好吧,我在代碼文件夾中,執行你寫的內容,但是出現錯誤。很奇怪。想要在這裏發佈? – Alessandroempire 2013-04-23 16:32:25

+0

這是我得到: 亞歷山德羅@ ALC:〜/的Java /特拉瓦霍/ src目錄$的javac -cp; ../的lib/*罐子Main.java 的javac:沒有源文件 用法:javac的<源文件> 使用-help查看可能的選項列表 bash:../lib/jxl-2.6.jar:權限被拒絕 – Alessandroempire 2013-04-23 16:33:58