0

java.lang.NoClassDefFoundError

2 つの jar ファイルに依存する Java プログラムがあります。コマンドを使用してプログラムをコンパイルします。

javac -classpath jar1.jar:jar2.jar myprog.javaそして、それは正常にコンパイルされます。

しかし、コマンド : を使用してプログラムを実行しようとするとjava -cp jar1.jar:jar2.jar myprogjava.lang.NoClassDefFoundError. 助けてください、どこが間違っていますか?

私はubuntu 10.04を使用しています。

実際のエラー:

Exception in thread "main" java.lang.NoClassDefFoundError: userapps/SelectionTask_classes/SelectionTask
Caused by: java.lang.ClassNotFoundException: userapps.SelectionTask_classes.SelectionTask
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: userapps/SelectionTask_classes/SelectionTask. Program will exit.

ここで、SelectionTask は、コンパイルが成功した後に生成されたクラス ファイルです。

4

3 に答える 3

1

現在のディレクトリがクラスパスにもあることを確認してください。次のコマンドで実行してみてください:

java -cp .:jar1.jar:jar2.jar myprog

コンパイルされたクラス ファイルmyprog.classが現在のディレクトリにある場合。

(これは、プログラムがパッケージに含まれていないことを前提としています)。

于 2012-02-09T13:33:40.750 に答える
0

コンパイルされたJavaプログラム(* .class)ファイルが置かれているディレクトリを追加する必要があります。現在のディレクトリにある場合は、次のように実行できます(現在の作業ディレクトリを示す「。」に注意してください)。

java -cp .:jar1.jar:jar2.jar myprog
于 2012-02-09T13:34:06.537 に答える
0

エラーを見てください。「userapps.SelectionTask_classes.SelectionTask」が見つからないと不平を言っています。これは、クラスパスの最後のエントリが正しく指定されていないことを示唆しています。ここで、指定した JAR ファイルが次のディレクトリ構造にあると仮定します。

./hadoop-0.20.1-core.jar

./lib/hadoopdb.jar

./userapps/SelectionTask_classes/

次のように実行します。

java -cp hadoop-0.20.1-core.jar:lib/hadoopdb.jar:userapps/SelectionTask_classes/ myprog
于 2012-02-09T14:11:41.577 に答える