2

何も変更せずにMavenを実行すると、maven-compiler-pluginJavaファイルが再コンパイルされることがよくあります。またはmaven-war-plugin、何も変わっていないにもかかわらず、戦争を再構築またはコピーします。またはgwt-maven-plugin、何も変更されていないにもかかわらず、Google Web Toolkit コードをビルドします (一部のコンピューターでは、他のコンピューターではそうではありません)。

Maven が何かを再構築することを決定した理由をどのように確認できますか? たとえば、(誤って) 変更されたと思われるファイルはどれですか?

例を次に示しますmaven-compiler-plugin。何も変更されていない場合でも、毎回戦争リソースを再コピーします。開発時間を節約するために「爆発」戦争を使用していますが、これは通常の戦争でも発生します。

しかし、私の質問は、より一般的には、Maven の目標が既存の出力を使用するのではなく再構築することを選択する理由を見つける方法です。

[INFO] Processing war project
[INFO] Copying webapp webResources [d:\dev\proj1/war/WEB-INF] to [d:\dev\proj1\target\proj1-0.0.1-SNAPSHOT]
[INFO]  Copying webapp webResources [d:\dev\proj1/lib/libs] to [d:\dev\proj1\target\proj1-0.0.1-SNAPSHOT]
[INFO]  Copying webapp resources [d:\dev\proj1\war]
 Webapp assembled in [37919 msecs]
4

1 に答える 1

2

Maven プラグインは独自に (おそらくヘルパーを使用して) 古いチェックを実装する必要があり、理由をログに記録するかどうかは自由であるため、一般的な答えはありません (たとえば、Gradle とは異なります)。全体として、Maven のインクリメンタル ビルドのサポートはかなり貧弱であり (たとえば、 https: //cwiki.apache.org/confluence/display/MAVEN/Incremental+Builds を参照してください。これはかなり古いものですが、AFAICT はほとんど正しいものです)、大きく依存しています。各プラグイン (およびそのバージョン)

デバッグ ログ ( ) を使用して Maven を実行mvn -Xし、ログを掘り下げることができます。ただし、最初にプラグインの最新バージョンを使用してみてください。これは、入力が古いと見なされた理由や、観察された動作を修正する理由についての答えが得られるという意味ではありません。しかし、プラグイン自体をデバッグする以外に解決策はありません。

于 2017-06-28T08:19:48.817 に答える