web-dev-qa-db-ja.com

NoClassDefFoundError:間違った名前

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.

名前とパスが正しいので、なぜこの例外が発生するのでしょうか?

54
thinkBig

スレッド「メイン」の例外Java.lang.NoClassDefFoundError:ClientREST

そのため、Java ClientRESTとして実行しました。 packageなしのClientREST.classが必要です。


(間違った名前:clientrest/ClientREST)

ねえ、クラスはpackage clientrest;を持っていることを伝えようとしています。パッケージルートから実行する必要があります。パッケージを表すclientrestフォルダーが含まれるフォルダーに移動するようにフォルダーを1つ上に移動し、Java clientrest.ClientRESTを実行します。

notclientrestパッケージフォルダー内に移動して、Java ClientRESTを実行する必要があります。

99
BalusC

コマンドラインJavaを使用してこのエラーが発生しました。

Java -cp stuff/src/mypackage Test

Test.Javaはパッケージmypackageにあります。

代わりに、クラスパス-cpをベースフォルダ(この場合はsrc)に設定し、ファイル名の前にパッケージを追加する必要があります。

したがって、最終的には次のようになります。

Java -cp stuff/src mypackage.Test

9
Gaʀʀʏ

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

これが、環境にクラスパスを持たずにようやく機能するようになった方法です

4
Slaphead

以下の構文を試してください:

Javaファイルは次の場所にあります:fm/src/com/gsd/FileName.Java

したがって、次の構文を使用して実行できます。

(現在のディレクトリを「fm」にする)

Java src.com.gsd.FileName

2
ShivaMahesh

おそらく、クラスを生成している場所はクラスパス上に存在しません。実行中に、実行中にjvm arg -verboseを使用し、クラスがロードされているかどうかをログで確認します。

出力は、クラスがどこからロードされているかについての手掛かりも提供します。クラスファイルがその場所に存在することを確認してください。

2
Swapnil