Maven
とGradle
は、私が間違っていないとデフォルトでインクリメンタルビルドを使用しています。Maven/Gradleコンパイルされたクラスをリストアップ
- 新しく/最初のビルドでは、すべてのクラスファイルをビルドします。
- 変更なしで次にビルドすると、クラスファイルは作成されません。
- A.javaを変更すると、モジュールが再コンパイルされます。
このビルドでコンパイルされたクラス・ファイルのリストを取得するための任意のオプションがありますか?
Maven
とGradle
は、私が間違っていないとデフォルトでインクリメンタルビルドを使用しています。Maven/Gradleコンパイルされたクラスをリストアップ
このビルドでコンパイルされたクラス・ファイルのリストを取得するための任意のオプションがありますか?
約maven.compiler.verbose
はいかがですか?私はtrueに設定した場合
は、私はどちらか
% mvn compile -Dmaven.compiler.verbose=true 2>&1 | grep class
[INFO] Nothing to compile - all classes are up to date
取得したり、私がA.java
ファイル
% mvn compile -Dmaven.compiler.verbose=true 2>&1 | grep class | grep wrote
[wrote RegularFileObject[/tmp/mvn-compile/target/classes/A.class]]
[wrote RegularFileObject[/tmp/mvn-compile/target/classes/B.class]]
... and other similar output
を変更する場合にも、あなたのOSおよびトレース(例えば、strace
に深い少しを得ることができますいくつかのLinuxディストリビューションでは)write
syscalls(posix準拠のプラットフォーム)と書かれているファイル.class
をgrepします。
また、javac
というフォークのオプション-Dmaven.compiler.fork=true
を使用することもできます(これはデフォルトでは使用されていましたが、もはやはっきりしません)。 javacの引数は、一時ファイル(javacの実行中にのみ存在します。たとえば/tmp/org.codehaus.plexus.compiler.javac.JavacCompiler2179201625419771061arguments
)を介して渡されます。 cat
このファイルを参照し、再コンパイルするjavacに渡されるファイルを確認することもできます。それは私の場合は(Mac OS X)では、このファイルは/tmp
に保存され、出力に、私は単純に
% cd /tmp; while true; do ls org.codehaus.plexus.compiler.javac.JavacCompiler* | xargs cat; sleep 1; done
zsh: no matches found: org.codehaus.plexus.compiler.javac.JavacCompiler*
zsh: no matches found: org.codehaus.plexus.compiler.javac.JavacCompiler*
zsh: no matches found: org.codehaus.plexus.compiler.javac.JavacCompiler*
"-d"
"/tmp/mvn-compile/target/classes"
"-classpath"
"/Users/stepan/.m2/repository/com/typesafe/config/1.3.0/config-1.3.0.jar:/Users/stepan/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.6.4/jackson-core-2.6.4.jar:"
"-sourcepath"
"/tmp/mvn-compile/src/main/java/A.java"
"/tmp/mvn-compile/src/main/java/B.java"
"-s"
"/tmp/mvn-compile/target/generated-sources/annotations"
"-g"
"-verbose"
"-nowarn"
"-target"
"1.8"
"-source"
"1.8"
"-encoding"
"UTF-8"
を実行するもう一つの問題は、Mavenのは、再コンパイルするクラスを決定する方法です。私が正しく覚えていれば、それは.java
のファイルと一致するファイルの.class
のタイムスタンプの比較に基づいていました。 .java
ファイルが新しい場合は、javacに追加されて再コンパイルされます。しかし、私は今すぐ見ることができます、それはもっと複雑で、その理由を理解するために、私はデバッグを実行することをお勧めしますAbstractCompilerMojo.java
とそのexecute
メソッドを見てください。
たとえば、ソースディレクトリにpackage-info.java
というファイルがある場合、すべてのクラスは変更されていなくても常に再コンパイルされます。
Mavenにビルドアクティビティを記録するように設定する方法について説明している[こちら](http://stackoverflow.com/questions/3441013/getting-a-build-logfile-by-maven)をご覧ください。 –
@TimBiegeleisen、 'compiled'クラスだけを出力する特定のオプションです。 'Info'はその情報を表示しません。 'debug'モードでのダンプは、私のクエリに関する多くの有益な情報を与えません。 – Reddy