2011-02-06 8 views
3

私はjavacとJavaのパッケージに関する簡単な質問があります。 パッケージ内のクラスをコンパイルするには、どうすれば "java program"(パッケージ名なし)を使用してクラスを後で実行できますか?

は、私は簡単なプログラムを持って、次のディレクトリ内に現在ある(我々はそれProgram.javaを呼び出します):

  • myRepository/MYPROGRAM
  • Program.javaおよびその他の.javaで

myRepository/myProgramディレクトリのファイルは、package myProgram.*と宣言しており、import myProgram.*;も含まれています。

だから私がjavac myProgram/Program.javaと入力すると、それはコンパイルされ、java myProgram/Programと入力すれば正常に動作します。

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

Exception in thread "main" java.lang.NoClassDefFoundError: Program (wrong name: myProgram/Program).

を私は.classファイルを表示するために得ることができる任意の方法の方法はありますソースコードが(myRepository/myProgram)ではなくメインディレクトリ(myRepository)にあり、myRepository内でjava Programを実行することができますか?

答えて

0

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

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

あなたは別のディレクトリにそれらを置くことができますが、その後、彼らはそこに右の構造を持つことになります、そして、あなたのVMにこのディレクトリを与える必要があります。

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

(デフォルトjavaコマンドを使用)方法はありませんパッケージ名を記述することなくパッケージ内のクラスを実行する。することができます、あなたがIDEで開発している場合、代わりに

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

あなたは、単に元のクラスを呼び出して、(任意のpackage宣言なしなど)匿名パッケージ内にあるラッピングクラスを使用することができます多くの場合、ボタンをクリックしてプログラムを起動するだけです。

配布するには、すべてのクラスファイルをjarファイルに入れ、マニフェストにメインクラスを定義します。次に、あなたのプログラムをこのように呼び出すことができます。

java -jar myProgram.jar 
+0

ソースコードが異なる場合に「java program」と入力してメインディレクトリから操作できるようにする方法はありませんディレクトリ? – FlamesPuck12

+1

新しい 'java'実装を書くこととは別に、 IDEを使用して、コードをコンパイルして実行するためのボタンを押す(またはホットキーを押す)ことができます。 –

2

あなたはより良いディレクトリソース/ MYPROGRAMにソースコードを入れて、.classファイルを置くためのビルドというディレクトリを作成します。したがって、コンパイルしてこの方法でコンパイルして実行することができます:

+0

Nvm、私はそれをこの方法を使って動作させました。私はちょうど私がメインのリポジトリディレクトリでjavaプログラムを行うことができるように私はそれを設定することができたと思っていたが、これは行う必要がありますね。 – FlamesPuck12

関連する問題