ディレクトリ(javac * .Java)で複数のファイルをコンパイルしていますが、これを実行しようとすると問題が発生します。
Javacがオブジェクトのシンボルを見つけられないと言うコンパイルエラーが出ます。
Javaファイルを含む複数のパッケージがあります。しかし、これらを1つずつコンパイルしようとしても機能しないようです。私のIDEですが、コマンドプロンプトを介してそれがどのように行われるかを知りたいと思っています。
メインプログラムはdriversフォルダーにあります。
依存関係の順にファイルをコンパイルしようとしましたが、うまくいきませんでした。
Javac documentation は、必要なすべての情報を提供します。ただし、コマンドラインビルドにAntまたはMavenを使用すると便利な場合があります。
これ ページは、単純なプロジェクトを構築するために最初にjavac、次にAntを使用する良い例を提供します。
以下はサンプルプロジェクトで、javacでコンパイルする方法を示しています。
プロジェクトのツリー構造は次のとおりです。
.
├── build
└── src
├── attacks
├── drivers
│ └── Driver.Java
└── exceptions
└── MyException.Java
コンパイルされたクラスを格納するためのbuild
とソースファイルを格納するためのsrc
の2つの特別なディレクトリがあります(異なるサブディレクトリにある可能性があります-パッケージ)。
次のコマンドは、プロジェクト全体をコンパイルし、結果をbuild
ディレクトリに配置します。
javac -sourcepath src -d build src/**/*.Java
-sourcepath src
は、コンパイラがすべてのソースを見つけることができる場所として、ディレクトリsrc
を指定します。 -d build
オプションは、コンパイル済みファイルを配置する場所をコンパイラーに指示します。
オプションsrc/**/*.Java
は、実際にコンパイルするファイルをコンパイラーに指示します。この特定のケースでは、2つのレベルを調べて、そのレベルのすべての* .Javaを選択するようにjavacに指示します。
*.Java
ファイルが異なるレベルにある場合は、ファイルのリストを指定する必要があります。このため、このようなリストを外部ファイルとして作成し、javac
の入力オプションのようにこのファイルを渡すことができます。
Linux/Unixでこれを行う方法は次のとおりです。
find -name "*.Java" > source.txt
上記のコマンドは、見つかった* .Javaファイルの完全パスを含むファイルsource.txtを作成します。この例では、次のものが含まれています。
./src/drivers/Driver.Java
./src/exceptions/MyException.Java
ソースファイルのリストをsource.txt
にフラッシュしてプロジェクトをコンパイルするには、次のコマンドを使用できます。
javac -d build @source.txt
@source.txt
は、ソースファイルのリストを探す場所をコンパイラーに指示する最後に指定されていることに注意してください。 -sourcepath
オプションは省略できることにも注意してください。
上記のコマンドを実行した後のディレクトリ構造の変化を次に示します。
.
├── build
│ ├── drivers
│ │ └── Driver.class
│ └── exceptions
│ └── MyException.class
└── src
├── attacks
├── drivers
│ └── Driver.Java
└── exceptions
└── MyException.Java
ご覧のとおり、build
ディレクトリには、それぞれのパッケージのコンパイル済みクラスファイルが含まれています。
また、たとえば、Driver
にメソッドmain
があると仮定して実行したい場合は、次のコマンドでプログラムを実行します。
Java -cp .:build:**/*.class drivers.Driver
ファイル区切り記号:
(コロン)はUnixで使用されていることに注意してください。Windowsの場合は;
(セミコロン)に変更してください。
ディレクトリ内の複数のファイルをコンパイルしています(javac * .Java)
すでに間違っています。 Javaクラスがパッケージに含まれていない場合にのみ正しく機能します。これを行う正しい方法は次のとおりです。ここで、src
はすべてのディレクトリの名前です。あなたのパッケージディレクトリはルート化されています:
cd src
javac package1/package2/*.Java
javac package3/package4/package5/*.Java
など、パッケージ/ディレクトリのレイアウトが何であれ。各javac
コマンドラインは、指定されたディレクトリ内のすべてのファイルをコンパイルしますand依存する他のパッケージ/ディレクトリ内のすべての.Javaファイルは、まだコンパイルされていないか、出力されていません日付の。
javac
については、ツールのドキュメントを参照してください。
2つのオプション:
1)コマンドラインを使用して、コンパイルするすべてのファイルを指定します
2)すべてのファイル名(おそらくfindからの出力)を含むファイルを作成し、javac @argfileを実行します。