14

私はこれを知りたいと思っていました。「clean」を実行せずにmvninstallを実行すると、mavenは変更されたJavaファイルのみをコンパイルします。MavenはJavaファイルが変更されているかどうかをどのように識別しますか?ファイルの最後に変更されたプロパティを使用していないと思います。

私の信念の理由:モジュールがあり、svnからの変更をマージした後、mvn installを実行しましたが、変更されたファイルがコンパイルされませんでした。変更を確認すると、「long」が「Long」に変更されていることがわかりました。ゲッターとセッター。

だから私はJavaファイルが変更されたかどうかをMavenがどのように識別するのか知りたいだけですか?

(PS私はApache Maven 3.0.3を使用しています、それが重要な場合)

4

3 に答える 3

16

Mavenコンパイラプラグインは、ソースファイルとクラスファイルの最終変更日を使用して、再コンパイルが必要かどうかを判断すると思います。

コンパイラーのWebサイトには情報がかなり不足していますが、ゴールページには、古さの計算を微調整する次の属性に関する情報があります。http :compiler:compile //maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html #staleMillis。それは陳腐化に関する唯一の公式声明についてです。

于 2012-08-02T07:42:46.627 に答える
6

Mavenについてあまり知らなくても、一般的に言えば、「make」のようなツールは「最終変更」タイムスタンプを使用します。これにより、svnで発生した問題が説明されます(Subversionの弱点に関するWikipediaを参照してください) 。

于 2012-08-02T07:48:09.253 に答える
0

https://issues.apache.org/jira/browse/MCOMPILER-205でのRobertScholteのコメントは、プロセスを説明しています。これは、「maven-compiler-plugin」の「useIncrementalCompilation」オプションに依存します(そして、そのバージョンによっては、「useIncrementalCompilation」は3.0ではなく3.1でしか機能しませんでした)。

多少の混乱があるようですので、何かを変更する必要があります。ドキュメントを改善するだけで十分かもしれません。コードを見ると、非インクリメンタルは変更されたソースファイルのみを見ることがわかります。インクリメンタルは、依存関係が変更されたかどうか、およびファイルが追加または削除されたかどうかも確認します。変更されている場合は、classes-directory全体が削除されます。その理由は、デフォルトのJavaコンパイラは非常に高速であり、ファイルごとにそれをどう処理するかを分析するよりもはるかに高速である可能性が高いためです。IIUC eclipseコンパイラは実際のインクリメンタルコンパイラであるため、使用されているコンパイラに基づいて、classesディレクトリを削除しないことを決定できます。

于 2018-06-03T15:28:52.467 に答える