2012-03-12 6 views
0

私がコンパイルされていると私は今、つまりディレクトリ内から次のコマンドを使用してOSXとFendoraで端末からthisプログラムを実行しようとしています:私は、次の取得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

+0

jarファイルは必要ありません。私はこれがWindows上で正常に動作することに注意する必要があります。 – Ash

答えて

2

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

または、彼らは現在のディレクトリにある場合:彼らはclassesディレクトリにある場合

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

+0

クラス名を確認してください。これは大文字のSを持つ 'PSucker'です。私の例を変更しました。 – nwinkler

+0

申し訳ありませんが、私は端末でPSuckerを実行していました。 – Ash

1

あなたはすなわちディレクトリから、それを実行する場合、それは動作するはずです。

CLASSPATH環境変数に依存することは一般的には推奨されません。コンパイルされたクラスがどこにあるかに応じて、javaコマンドにこの場所を含める必要があります。たとえば、次のようにしてください:-cpスイッチを使用して、hteコマンドラインにクラスパスを明示的に指定してください。

+0

'ie'の上のディレクトリから無駄に実行しようとしました。 – Ash

+1

@Ash:まあ、それは確かに内から暴走することはありません。しかし、それを修正しても問題が解決しない場合、ファイルアクセス権の問題かもしれません。 –

関連する問題