2012-03-12 153 views
0

我編譯,現在我想在OSX和Fendora終端運行this程序使用以下命令從IE目錄中:Java類路徑問題

java ie.moguntia.webcrawler.Psucker http://www.wikipedia.org test

但是我得到以下錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: ie/moguntia/webcrawler/Psucker 
Caused by: java.lang.ClassNotFoundException: ie.moguntia.webcrawler.Psucker 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 

我沒有跑所使用的軟件包的命令行之前,所以因此,我無法找出錯誤的應用程序。

我曾試圖設定使用export CLASSPATH=.使當前目錄將被添加到類路徑的類路徑。

的目錄結構如下:

ie/moguntia/webcrawler/

+0

CWD是否有必需的jar? – Nishant 2012-03-12 12:30:25

+0

沒有要求的jar文件。我應該注意到,這在Windows上運行良好。 – Ash 2012-03-12 12:46:35

回答

2

明確地將類路徑放在hte命令行上。根據編譯類的位置,您需要將此位置包含在java命令中,例如,如果他們是在classes目錄:

java -cp classes ie.moguntia.webcrawler.PSucker http://www.wikipedia.org test 

,或者如果他們是在當前目錄:

java -cp . ie.moguntia.webcrawler.PSucker http://www.wikipedia.org test 

或只是

java ie.moguntia.webcrawler.PSucker http://www.wikipedia.org test 

這裏是我是如何能夠運行這個(解壓,cd到目錄,編譯,查找類,運行):

(13:55:52) ~/Desktop/temp → ll 
total 32 
[email protected] 1 Nils.Winkler staff 14K 12 Mär 13:41 multiweb.zip 

(13:56:01) ~/Desktop/temp → unzip multiweb.zip -d multiweb 
Archive: multiweb.zip 
    creating: multiweb/CVS/ 
    creating: multiweb/ie/ 
    creating: multiweb/ie/CVS/ 
    creating: multiweb/ie/moguntia/ 
    creating: multiweb/ie/moguntia/CVS/ 
    creating: multiweb/ie/moguntia/threads/ 
    creating: multiweb/ie/moguntia/threads/CVS/ 
    inflating: multiweb/ie/moguntia/threads/ControllableThread.java 
    inflating: multiweb/ie/moguntia/threads/MessageReceiver.java 
    inflating: multiweb/ie/moguntia/threads/ObjectQueue.java 
    inflating: multiweb/ie/moguntia/threads/Queue.java 
    inflating: multiweb/ie/moguntia/threads/ThreadController.java 
    creating: multiweb/ie/moguntia/webcrawler/ 
    creating: multiweb/ie/moguntia/webcrawler/CVS/ 
    inflating: multiweb/ie/moguntia/webcrawler/PSucker.java 
    inflating: multiweb/ie/moguntia/webcrawler/PSuckerThread.java 
    inflating: multiweb/ie/moguntia/webcrawler/SaveURL.java 
    inflating: multiweb/ie/moguntia/webcrawler/URLQueue.java 
    inflating: multiweb/ie/moguntia/webcrawler/WSDLCrawler.java 
    inflating: multiweb/ie/moguntia/webcrawler/WSDLCrawlerThread.java 

(13:56:08) ~/Desktop/temp → cd multiweb 

(13:56:57) ~/Desktop/temp/multiweb → javac ie/moguntia/webcrawler/*.java 
Note: Some input files use unchecked or unsafe operations. 
Note: Recompile with -Xlint:unchecked for details. 

(13:57:11) ~/Desktop/temp/multiweb → find . -name *.class 
./ie/moguntia/threads/ControllableThread.class 
./ie/moguntia/threads/MessageReceiver.class 
./ie/moguntia/threads/Queue.class 
./ie/moguntia/threads/ThreadController.class 
./ie/moguntia/webcrawler/PSucker.class 
./ie/moguntia/webcrawler/PSuckerThread.class 
./ie/moguntia/webcrawler/SaveURL.class 
./ie/moguntia/webcrawler/URLQueue.class 
./ie/moguntia/webcrawler/WSDLCrawler.class 
./ie/moguntia/webcrawler/WSDLCrawlerThread.class 

(13:57:18) ~/Desktop/temp/multiweb → java ie.moguntia.webcrawler.PSucker http://www.wikipedia.org test 
[0] http://www.wikipedia.org 
+0

我已將目錄結構添加到問題中。 – Ash 2012-03-12 12:39:23

+0

檢查classname - 它是一個大寫字母S的'PSucker'。我改變了我的例子。 – nwinkler 2012-03-12 12:44:23

+0

對不起,這是一個錯字,我一直在我的終端上運行PSucker。 – Ash 2012-03-12 12:46:07

1

,如果你從外面即目錄中運行它,它應該工作。

注意,依託CLASSPATH環境變量一般不推薦;而是使用-cp開關

+0

我試過從'ie'上面的目錄運行它無濟於事。 – Ash 2012-03-12 12:40:42

+1

@Ash:好吧,它永遠不會從內部移動,這是肯定的。但是,如果修復不起作用,這可能是文件訪問權限的問題。 – 2012-03-12 13:04:37