2012-01-25 20 views
1

マルチモジュールのMavenプロジェクトでは、ビルドに4〜6分かかることがありました。過去数ヶ月にわたって、ビルドごとに20 +分に増加しました。 1つの症状は、私が<を打つまでと入力するまでビルドが一時停止しているように見えることがあるということです。しかし、Mavenビルドはビルドサーバ上でまだ正常に動作しています(6分、休止なし)。Maven Assemblyプラグインをどのように設定すると問題が発生するのでしょうか?

ビルドコマンドがあるmvn clean package -D<profile>

は、私たちのプラグインのいくつかは、次のとおりです。

  • PMDを
  • FindBugsの
  • 総会
  • スリフトコンパイラ
  • JSPC-のmaven-pluginの
  • maven-replacer-pl ugin

また、Googleには内部Nexusリポジトリがあります。

更新:

[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] Project Parent ............................. SUCCESS [17.703s] 
[INFO] Dependencies ............................... SUCCESS [0.109s] 
[INFO] Thrift Service ............................. SUCCESS [1:51.141s] 
[INFO] Thrift API Client Sample ................... SUCCESS [14.219s] 
[INFO] Application ................................ SUCCESS [14:07.984s] 
[INFO] Webapps Parent ............................. SUCCESS [1.250s] 
[INFO] Webapp A ................................... SUCCESS [27.547s] 
[INFO] Webapp B.................................... SUCCESS [20.672s] 
[INFO] Webapp C ................................... SUCCESS [1:14.656s] 
[INFO] Assembly ................................... SUCCESS [5:47.219s] 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 24:23.234s 
[INFO] Finished at: Fri Jan 27 10:47:38 EST 2012 
[INFO] Final Memory: 25M/66M 
[INFO] ------------------------------------------------------------------------ 

ビルド・サーバー(チーム市):ログに

ローカルビルドのビルド

[02:16:31]: [INFO] ------------------------------------------------------------------------ 
[02:16:31]: [INFO] Reactor Summary: 
[02:16:31]: [INFO] 
[02:16:31]: [INFO] Project Parent ............................. SUCCESS [3.421s] 
[02:16:31]: [INFO] Dependencies ............................... SUCCESS [3.157s] 
[02:16:31]: [INFO] Thrift Service ............................. SUCCESS [41.314s] 
[02:16:31]: [INFO] Thrift API Client Sample ................... SUCCESS [1.220s] 
[02:16:31]: [INFO] Application ................................ SUCCESS [4:09.617s] 
[02:16:31]: [INFO] Webapps Parent ............................. SUCCESS [0.323s] 
[02:16:31]: [INFO] Webapp A ................................... SUCCESS [12.811s] 
[02:16:31]: [INFO] Webapp B ................................... SUCCESS [16.496s] 
[02:16:31]: [INFO] Webapp C ................................... SUCCESS [19.011s] 
[02:16:31]: [INFO] Assembly ................................... SUCCESS [1:45.872s] 
[02:16:31]: [INFO] ------------------------------------------------------------------------ 
[02:16:31]: [INFO] BUILD SUCCESS 
[02:16:31]: [INFO] ------------------------------------------------------------------------ 
[02:16:31]: [INFO] Total time: 7:33.655s 
[02:16:31]: [INFO] Finished at: Wed Jan 25 02:16:31 EST 2012 
[02:16:31]: [INFO] Final Memory: 42M/317M 
[02:16:31]: [INFO] ------------------------------------------------------------------------ 

を更新2

ここでは、経験あります私のビルドは、このbashスクリプトが提供するタイムスタンプ分析を使用して、そのほとんどの時間を費やしている場所の分析は:https://gist.github.com/993139

Build Times by Task

いくつかのビルドのために、私はFindBugsは、PMDとユニットテストを無効にすることができると私には思えます。しかし、私は最終的なビルドアウトプット、すなわちAssemblyが必要です。だから私の質問に焦点を当てさせてください。何がAssembly Pluginを遅く動かすことができますか?

アップデート3

予想したように、FindBugsは、PMDとユニットテストは、私は議会が4分を取るべきではないと思います

50%以上
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] Project Parent .................................... SUCCESS [13.969s] 
[INFO] Dependencies ...................................... SUCCESS [0.094s] 
[INFO] Thrift Service .................................... SUCCESS [47.125s] 
[INFO] Thrift API Client Sample .......................... SUCCESS [11.922s] 
[INFO] Application ....................................... SUCCESS [3:10.922s] 
[INFO] Webapps parent .................................... SUCCESS [0.468s] 
[INFO] Webapp A .......................................... SUCCESS [18.157s] 
[INFO] Webapp B .......................................... SUCCESS [18.437s] 
[INFO] Webapp C .......................................... SUCCESS [1:00.672s] 
[INFO] Assembly .......................................... SUCCESS [3:55.969s] 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 9:58.609s 
[INFO] Finished at: Mon Feb 06 10:21:01 EST 2012 
[INFO] Final Memory: 24M/59M 
[INFO] ---------------------------------------------------------------------- 

でビルドを切りました。組み立て段階では、次のような多くのものが見られます。

[INFO] --- maven-assembly-plugin:2.2:single (assembly-full) @ assembly --- 
[INFO] Reading assembly descriptor: C:\projects\my-project\assembly/src/main/assembly/assembly-full.xml 
[INFO] project-2.9.3-SNAPSHOT/config/ already added, skipping 
[INFO] project-2.9.3-SNAPSHOT/config/ already added, skipping 
[INFO] project-2.9.3-SNAPSHOT/ already added, skipping 
[INFO] project-2.9.3-SNAPSHOT/var/ already added, skipping 

各アセンブリのアーチファクトが繰り返されています。これがどういうわけか遅さの原因になりますか?

+0

Mavenビルドの出力の終わりの出力は何ですか?モジュールごとに使用されている時間があります。これは最初にどこを開始するかを示しています...キーボードの動作を一時停止して待機するビルド本当に奇妙な音...あなたはmvn cleanパッケージ/ mvn deployのみを実行していますか、またはmvnサイトを実行していますか? – khmarbaise

+0

質問を部分的な回答で更新しました。もちろん、ビルド終了プリントを得るのに1/2時間かかるでしょう: - \ – noahlz

+0

Windowsのコマンドラインからビルドを実行し、誤ってターミナルウィンドウをクリックするとビルドが一時停止します(少なくとも私の経験)。それを続けるには、打つエンターを押してください。これが休止の原因になりますか? – BenjaminLinus

答えて

0

最初にビルドをローカルで実行し、コンソールを監視することをお勧めします。これは、最も長くかかるプラグインを簡単に識別するのに役立ちます。

私の想起から、PMDとFindBugsは実行にかなりの時間がかかります。大きなプロジェクトでも同じようにjavadocが動作します。あなたが言及した他のプラグインは私がコメントすることはできません。

もちろん、遅いシステムで動作している場合、遅いストレージを使用している場合は、Nexusが問題になる可能性があります。

ああ、ちょうどあなたの投稿を読んでください:それは主にローカルマシンで起こります。ローカルマシンは何をしていますか?メモリが足りない状況に陥っていますか?一時停止が発生した場合にも、その兆候を示すことができる。

1

同じ問題が発生しました(プロジェクトのアセンブリを構築するのに40分です)。 stacktrackeを調べると、アセンブリプラグインには時間依存のコンピューティングに時間がかかることが判明しました(コンピューティングはコピーしません)。プロジェクトのためにアセンブリプラグインが遅い場合、dependencySetをコメントアウトすると処理速度が大幅に向上します。

maven 3.0.xの回避策は、アセンブリプラグインの前に適切なスコープで目標dependency:copy-dependenciesを使用し、fileSetを使用してこれらのコピーされた依存関係をアセンブリに含めることです。これにより、パフォーマンス上の問題がディスク容量を犠牲にして解決されます。私の場合、アセンブリのビルドには40分ではなく数秒かかります。

maven 3.2.xではこれまでの回避策はありません。遅い方法でより多くの場所で依存関係を計算し、何かを開始する前に長時間凍ってしまうからです。これにより、大規模なプロジェクトでは、maven 3.2.xが不完全になります。

関連する問題