0

私のソースファイルは次のフォルダにあります:c:\ data\mycompany。すべてのソースファイルには、最初の行として次のものが含まれています。ここで、c:\ dataフォルダーから、次のコマンドを使用してすべてをコンパイルしました:javac mycompany/*。java-extdirsc:\ some \ other \ folder \ with\libs。これは正常にコンパイルされます。次のコマンドを使用して(これもc:\ dataから)実行しようとすると、java mycompany / testとすると、次のエラーが発生します。

スレッド"main"の例外
java.lang.NoClassDefFoundError:
mycompany / test原因:
java.lang.ClassNotFoundException:
mycompany.test at java.net.URLClassLoader $ 1.run(不明なソース)

以下のコマンドも試しましたが、同じエラーが再現されます。

java mycompany / test -extdirs c:\ some \ other \ folder \ with \ libs

これはコンパイル/実行するための適切な方法ですか?

これが私のソースコードです:

package MyCompany;

public class Test
{
  public static void main(String[] args) 
  {
    System.out.println("test");
  } 
}
4

4 に答える 4

2

クラスパスを設定する必要があります。たとえば、このSOの質問を参照してください。

于 2010-02-22T20:21:23.060 に答える
2

java を呼び出すときに extdirs を使用しないでください。クラスパスを -cp で設定する必要があります。

ちなみに、メインの Java クラスを呼び出すときは、クラスへのパスではなく、クラス名を指定する必要があります。Java によって修正されるため、エラーではありません。

于 2010-02-22T20:24:46.400 に答える
1

つまり、.classファイルはクラスパス上にないため、コンパイル方法は問題ありません。テストコードを実行するときは、結果の.classファイルを含むディレクトリをクラスパスに追加する必要があります。

java -cp <path to classes> classtorun

あなたの例は次のようになります

java -cp <path to classes>;<path to libs> mycompany.Test

コンパイルとビルドを実行可能な.jarファイルに自動化するには、 ANTを実際に検討する必要があります。繰り返し入力することやエラーが発生する可能性があるため、この面倒な作業を手作業で行う人は誰もいません。ANTは、このような細かな点をすべて回避し、コマンドラインツールに苦労せずにコーディングの問題の解決に集中できるようにするために作成されました。これを読んでください。

于 2010-02-22T20:21:12.910 に答える
0

これをコンパイルしてみてください:

mkdir classes
javac -d classes *.java

/classes ディレクトリは初回のみ作成してください。-d ディレクトリは、.c​​lass ファイルを /classes の下に配置するように javac に指示します。

実行するには、次のようにします。

java -cp .;classes MyCompany.Test

これはうまくいくはずです。

于 2010-02-22T22:27:46.643 に答える