2011-07-13 13 views
11

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にするかどうかは分かりません。

答えて

5

Mavenは単なるJavaアプリケーションですので、YourKitJProfilerなどのプロファイリングツールで起動し、実行時のパフォーマンスを分析することをお勧めします。 JVisualVMを使用して、実行時のパフォーマンス情報を抽出することもできます。


私は、Maven開発者がこのパフォーマンス回帰について知りたいと考えています。 Maven Jiraのチケットを開いてください。Maven developers list

+0

ありがとうRobert!私はJProfilerの評価版を試してみました。その助けを借りて、jconsoleはどこでそれがどこの時間を費やしていたかを発見しました!開発者リストへのリンクを私に提供してくれてありがとう。私はそこに私の質問を掲示します! –

+1

ロバート、もう一度、正しい方向に向いてくれてありがとう。私は[a link](http://vivin.net/pub/maven-3.0.3-with-aether-1.12.zip)で、aether 1.12でビルドされたバージョンのMavenにコメントしています。 –

+0

@Vivin - あなたの問題が整理されているのを見てうれしい。 –

2

Mavenビルドをプロファイリングする一般的な質問については、Mojoの実行時間を出力するためのパッチを提供するCodehaus JIRA issueがあります。残念ながら、まだMavenには含まれていません。

関連する問題