web-dev-qa-db-ja.com

複数のJavaファイルがある場合のコンパイル方法Java他のパッケージのファイル

ディレクトリ(javac * .Java)で複数のファイルをコンパイルしていますが、これを実行しようとすると問題が発生します。

Javacがオブジェクトのシンボルを見つけられないと言うコンパイルエラーが出ます。

Javaファイルを含む複数のパッケージがあります。しかし、これらを1つずつコンパイルしようとしても機能しないようです。私のIDEですが、コマンドプロンプトを介してそれがどのように行われるかを知りたいと思っています。

メインプログラムはdriversフォルダーにあります。

依存関係の順にファイルをコンパイルしようとしましたが、うまくいきませんでした。this is a screenshot of the folders

16
OKGimmeMoney

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の場合は;(セミコロン)に変更してください。

21
01es

ディレクトリ内の複数のファイルをコンパイルしています(javac * .Java)

すでに間違っています。 Javaクラスがパッケージに含まれていない場合にのみ正しく機能します。これを行う正しい方法は次のとおりです。ここで、srcはすべてのディレクトリの名前です。あなたのパッケージディレクトリはルート化されています:

cd src
javac package1/package2/*.Java
javac package3/package4/package5/*.Java

など、パッケージ/ディレクトリのレイアウトが何であれ。各javacコマンドラインは、指定されたディレクトリ内のすべてのファイルをコンパイルしますand依存する他のパッケージ/ディレクトリ内のすべての.Javaファイルは、まだコンパイルされていないか、出力されていません日付の。

javacについては、ツールのドキュメントを参照してください。

3
user207421

2つのオプション:

1)コマンドラインを使用して、コンパイルするすべてのファイルを指定します

2)すべてのファイル名(おそらくfindからの出力)を含むファイルを作成し、javac @argfileを実行します。

1