2011-11-07 3 views
0

は、それが通常の(Hello3.classとJavaクラス)の "Java Hello3は" 私に与えることです:私がjavaパッケージ命名規則を尊重しないと、.classは "java"コマンドで見つけることができません。

Exception in thread "main" java.lang.NoClassDefFoundError: Hello3 (wrong name: pp/Hello3) 

Hello3.classがHello3.javaのコンパイルされたバイナリです。このJavaファイルはパッケージ "pp"の下にあると宣言されていますが、 "pp"ディレクトリには入れません。

Myコマンドjava Hello3.javaは、Hello3.javaと同じディレクトリで実行されます。さらに、 "java -cp。Hello3"コマンドも機能しません!おそらく私の問題?

私は次の回答からあなたの確認を得ているので、ここで素朴な結論を引き出すかもしれません。決して働かない.classを作るのは簡単です。単に.XavaをパッケージXXXの下に宣言しますが、XXXというディレクトリには入れないでください。 IMHO、これは攻撃として使うことができると思います!

+1

正しい動作のようです。クラスにはパッケージが内部的に格納されており、不正なディレクトリにある場合は動作しません。 –

答えて

3

本当にHello3.classをppという名前のディレクトリに置く必要があります。 ppを含むディレクトリはクラスパス内になければなりません。このディレクトリはclassesと呼ばれていると仮定します

... 
    |_ classes 
     |_ pp 
      |_ Hello3.class 

コマンドJavaプログラムは、このようにはい、これは正常ですWindowsの

java -cp c:\the\path\to\classes pp.Hello3 
1

であり、Hello3.java & Hello3.classファイルは、パッケージ宣言の指示に従ってppディレクトリの下になければなりません。

2

java -cp /the/path/to/classes pp.Hello3 

や、あるべき起動します。パブリックJavaクラスは、パッケージ名と一致するディレクトリになければなりません。

関連する問題