3

javac と Java のパッケージについて簡単な質問があります。

現在、次のディレクトリにある単純なプログラム (Program.java と呼びます) があります。

  • myRepository/myProgram

myRepository/myProgram ディレクトリにある Program.java およびその他の .java ファイルで、 を宣言package myProgram.*して含めimport myProgram.*;ました。

したがって、 と入力するjavac myProgram/Program.javaと、正常にコンパイルされ、 と入力すると正常に実行されますjava myProgram/Program

ただし、ソースファイルがあるmyRepositoryディレクトリではなく、 .classファイルをディレクトリに作成しようとしています。myRepository ディレクトリに .class ファイルを生成myRepository/myProgramしようとしましたが、「Java プログラム」を試すと、次のエラーが表示されます。javac myProgram/Program.java -d ..

スレッド「メイン」の例外 java.lang.NoClassDefFoundError: プログラム (間違った名前: myProgram/Program)。

ソース コードが存在する場所 (myRepository/myProgram) ではなく、メイン ディレクトリ (myRepository) に .class ファイルを表示し、myRepository 内で実行できるようにするjava Program方法はありますか?

4

3 に答える 3

2

ソース コードをディレクトリ source/myProgram に配置し、build というディレクトリを作成して .class ファイルを配置することをお勧めします。したがって、次の方法でコンパイルおよび実行できます。

javac source/myProgram/Program.java -d build
cd build
java myProgram/Program
于 2011-02-06T02:45:15.833 に答える
0

パッケージ化されたクラスは、どのディレクトリにも格納できません。このリンクが役立つ場合があります: http://www.herongyang.com/Java-Tools/javac-Option-d-Specifying-Output-Directory.html

于 2011-02-06T01:47:09.723 に答える
0

myRepository次のように、パッケージ ディレクトリ内からではなく、ディレクトリからコンパイラを呼び出す必要がありjavac myProgram/Program.javaますjava myProgram.Program

作成されたクラスは、クラスローダーがそれらを見つけるためにパッケージ構造にある必要があります (少なくともデフォルトのクラスローダーでは)。

それらを別のディレクトリに置くこともできますが、そこに正しい構造があるため、このディレクトリを VM に与える必要があります。

javac -d ../classes myProgram/Program.java
java -cp ../classes myProgram.Program

javaパッケージ名を指定せずにパッケージ内のクラスを実行する方法は (デフォルトのコマンドでは) ありません。

元のクラスを呼び出すだけの匿名パッケージ (たとえば、package宣言なし) にあるラッピング クラスを使用できます。

class Program {
   public static void main(String[] args) {
       // delegate to real main class and method:
       myProgram.Program.main(args);
   }
}

あるいは、IDE で開発している場合は、多くの場合、ボタンをクリックするだけでプログラムを開始できます。

配布の場合は、代わりにすべてのクラス ファイルを jar ファイルに入れ、マニフェストでメイン クラスを定義します。次に、この方法でプログラムを呼び出すことができます。

java -jar myProgram.jar
于 2011-02-06T01:52:18.947 に答える