Netbeans7.0.1を使用してRESTful WebサービスをテストするためのJavaプログラムを作成しましたが、そこでは正常に動作します。コードをコンパイルするためにbuild.xmlファイルを作成し、 .classファイル私はいつもこの例外を受け取りました:
Exception in thread "main" Java.lang.NoClassDefFoundError: ClientREST (wrong name: clientrest/ClientREST)
at Java.lang.ClassLoader.defineClass1(Native Method)
at Java.lang.ClassLoader.defineClassCond(ClassLoader.Java:632)
at Java.lang.ClassLoader.defineClass(ClassLoader.Java:616)
at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:141)
at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:283)
at Java.net.URLClassLoader.access$000(URLClassLoader.Java:58)
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:197)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:190)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:307)
at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:301)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:248)
Could not find the main class: ClientREST. Program will exit.
名前とパスが正しいので、なぜこの例外が発生するのでしょうか?
スレッド「メイン」の例外Java.lang.NoClassDefFoundError:ClientREST
そのため、Java ClientREST
として実行しました。 package
なしのClientREST.class
が必要です。
(間違った名前:clientrest/ClientREST)
ねえ、クラスはpackage clientrest;
を持っていることを伝えようとしています。パッケージルートから実行する必要があります。パッケージを表すclientrest
フォルダーが含まれるフォルダーに移動するようにフォルダーを1つ上に移動し、Java clientrest.ClientREST
を実行します。
notclientrest
パッケージフォルダー内に移動して、Java ClientREST
を実行する必要があります。
コマンドラインJavaを使用してこのエラーが発生しました。
Java -cp stuff/src/mypackage Test
Test.Java
はパッケージmypackage
にあります。
代わりに、クラスパス-cp
をベースフォルダ(この場合はsrc)に設定し、ファイル名の前にパッケージを追加する必要があります。
したがって、最終的には次のようになります。
Java -cp stuff/src mypackage.Test
Garryの回答についてさらに説明します。クラスパスは、クラス自体が存在するベースディレクトリです。クラスファイルがここにある場合-
/home/person/javastuff/classes/package1/subpackage/javaThing.class
次のようにクラスパスを参照する必要があります。
/ home/person/javastuff/classes
したがって、コマンドラインから実行するには、完全なコマンドは次のようになります。
Java -cp/home/person/javastuff/classes package1/subpackage/javaThing
つまり、上記のテンプレートは
Java_executable -cp classpath the_class_itself_within_the_class_path
これが、環境にクラスパスを持たずにようやく機能するようになった方法です
以下の構文を試してください:
Javaファイルは次の場所にあります:fm/src/com/gsd/FileName.Java
したがって、次の構文を使用して実行できます。
(現在のディレクトリを「fm」にする)
Java src.com.gsd.FileName
おそらく、クラスを生成している場所はクラスパス上に存在しません。実行中に、実行中にjvm arg -verboseを使用し、クラスがロードされているかどうかをログで確認します。
出力は、クラスがどこからロードされているかについての手掛かりも提供します。クラスファイルがその場所に存在することを確認してください。