Mavenのビルドプロセス自体をプロファイリングするツールがあるので、ビルドのどこで最も多くの時間を費やしているのか分かりますか?Mavenのプロファイリング
私たちはMaven 3.0.3と3.0b1に関して仕事上問題があります。私たちのプロジェクトは、3.0.3(9m00s)に比べて3.0b1(3m30s)の方がずっと速く構築されています。 3.0b1ではビルドが約63%速くなります(私の数学が正しい場合)。
私はMavenの3についての性能比較やパフォーマンスの問題を探してみましたが、何かを見つけることができませんでした。
UPDATE
私はMavenのソースを見て、いくつかのより多くの研究を行なったし、これは私が見つけたものです:
JConsoleを使用している間、私は3.0.3に(時間のほとんどを見ました)はDefaultProjectDependenciesResolver.java
の内部で費やされます。そこで、3.0b1と3.0.3の両方にソースをダウンロードして、何が起きているのかを確認しました。私は3.0.3にはクラスの2つのバージョンがあることに気づいた。 1つはorg.apache.maven.project
で、もう1つはorg.apache.maven
です。 3.0.3では、前者が使用されているように見えます。コードをステップ実行しながら、私はそれがこの文に到達したときの時間の大半を費やしていることを見た:3.0b1で
node = repoSystem.collectDependencies(session, collect).getRoot();
、コードがない:
ArtifactResolutionResult result = repositorySystem.resolve(request);
は、私はまた、respositorySystem
がであることに気づきましたタイプRepositorySystem
、具体的な実装はLegacyRepositorySystem
です。私は、新しい実装が作成されるまでMaven 3がベータ版である間にこれが使用されていたと仮定していますか? 3.0.3に戻って、collectDependencies
メソッドはDefaultRepositorySystem.java
に属し、org.sonatype.aether.impl.internal
の一部です。これにより、最終的にのDefaultDependencyCollector.java
が呼び出され、org.sonatype.aether.impl.internal
の一部にもなります。私はこれが依存グラフがどのように構築されていると仮定しています。
私は今、それが原因で私たちの依存関係が構成されている方法であると思いまして。誰もこの種の行動を見たことがありますか?
UPDATE
修正案と一緒にこの問題についてJIRAでissueがあります。私は答えとして詳細を掲載しました。
UPDATE
問題は、Mavenの3.0.3(1.11)で使われているオードのバージョンによるものです。 aetherのバージョン1.12ではこの問題が修正されています。私はmaven 3.0.3へのソースをチェックアウトし、POMを編集して、aetherのバージョンを1.11から1.12に変更しました。私はソースからmavenをビルドし、現在のバージョンを私が構築したバージョンに置き換えました。ビルド時間の短縮は劇的です。
あなたがソースからMavenをビルドしたくない場合は、1.12バージョンとMavenのlibディレクトリにあるエーテルのライブラリを置き換えることができます。それもうまくいくはずです。
mavenデベロッパーは、aether 1.11からaether 1.12へのライセンス変更があると言っているので、この変更を3.0.4にするかどうかは分かりません。
ありがとうRobert!私はJProfilerの評価版を試してみました。その助けを借りて、jconsoleはどこでそれがどこの時間を費やしていたかを発見しました!開発者リストへのリンクを私に提供してくれてありがとう。私はそこに私の質問を掲示します! –
ロバート、もう一度、正しい方向に向いてくれてありがとう。私は[a link](http://vivin.net/pub/maven-3.0.3-with-aether-1.12.zip)で、aether 1.12でビルドされたバージョンのMavenにコメントしています。 –
@Vivin - あなたの問題が整理されているのを見てうれしい。 –