2

私はアイデアを熟考していて、開発者コミュニティに質問をしたいと思いました. 私が実際にmavenを使用して大規模なJAVAプロジェクトに取り組んでいるとき、驚くべき量の利点があります。ただし、プロジェクトは急速に成長しており、日が経つにつれてより多くのモジュールが表示されるため、ビルド時間が膨大になり、それが継続的インテグレーションに影響を与えることはありません.

質問 - モジュールのターゲット jar がローカルの maven リポジトリにあるものと異なるかどうかを最初に確認できる、スマートなプロジェクトの構築を可能にするすぐに使用できる機能はありますか。後者が真の場合、maven は同じモジュールを再構築および再デプロイせずに次のモジュールに進むことができますか?

よろしく

4

4 に答える 4

2

最良の方法は、並列ビルドをサポートする Maven 3 に切り替えることです。

mvn -T 3.0C clean package

また、Mavenを介して達成できる変更されたものを構築することも役立ちます。

mvn -pl module -am package

また、jenkins のような多くの CI システムはインクリメンタル ビルドをサポートしています。さらに、どの種類のテストが実行されているかを確認しますか? 単体テストを並行して実行できますか? (maven-surefire-plugin)。これらの単体テストは本当に単体テストですか、それとも統合テストの一部でしょうか?

于 2012-08-25T20:35:27.793 に答える
1

この問題に対する万能薬はありません。これは、多くの大規模プロジェクトが直面する一般的な問題です。

CI がトリガーされるという事実は、通常、SCM コミットによって行われるため、何かが常に変更されていることをお勧めします。

使用しているCI、モジュールの構成方法などを知らなければ、いくつかの基本を超えたアドバイスはできません。

1) CI で構成するモジュールが可能な限り細分化されていることを確認してください。つまり、可能な限り最小のビルドユニットです。これは、単一のコミットではコードのスワスを再構築する必要がないことを意味します。

2) 開発者の習慣: 完全な作業単位のみをコミットします。これは、Git に関するものです。開発者はローカルでコミットし、ワークユニットが完全に終了したときにのみマスターにプッシュします。これにより、ダウンストリーム CI ビルドが削減されます。

3) Maven で使用するレポートとモジュールを監視します。実行するのに永遠にかかるものもあります。それらすべてが本当に必要ですか?

于 2012-08-25T17:52:21.653 に答える
0

(想定:チーム内部リポジトリ。)

オフライン(プラグインによって尊重される場合)ビルド:

mvn -o ...

(想定:IDEはMavenをバイパスしてビルドします(バックグラウンドでのインクリメンタルコンパイル)。

モジュール間の依存関係の制限。他のモジュールからのインポートは非​​常に簡単であるため、依存関係の絡み合ったネットが発生することがあります。

于 2012-08-26T18:08:48.403 に答える
0

質問 - モジュールのターゲット jar がローカルの maven リポジトリにあるものと異なるかどうかを最初に確認できる、スマートなプロジェクトの構築を可能にするすぐに使える機能はありますか? [...]

私が知っている唯一の「賢さ」は、不要なビルドの「クリーン」フェーズをスキップすることです。これにより、一部のソースがコンパイルされなかったり、リソースが不必要に再生成されたりしなくなります。それでも、プロジェクトは再パッケージ化されます。

一部のモジュールを別の開発サイクルから除外することも検討してください (リリースごとにすべてのモジュールを本当に変更する必要がある場合を除く)。次に、あまり頻繁に変更されないモジュールをリポジトリから依存関係として含めることができます。それらは個別にビルドしてデプロイする必要があります。

于 2012-08-26T17:52:54.623 に答える