4

Git に保存されている Maven 3 マルチモジュール プロジェクト (~50 モジュール) があります。複数の開発者がこのコードに取り組んでビルドしています。また、プッシュごとにコールド ビルドを実行する自動ビルド マシンもあります。

ほとんどの個々の変更ログは、かなり少数のモジュールのコードを変更するため、変更のたびにソース ツリー全体を再構築するのは時間の無駄です。ただし、親プロジェクトのビルドを実行した最終結果が、コードベース全体をビルドした場合と同じになるようにしたいと考えています。また、手動でモジュールのバージョン管理を開始したくありません。これは、縦横無尽に行われるバージョン更新の悪夢になるからです。

私がやりたいことは、ビルドまたはインストールのいくつかのステップをインターセプトし、モジュール コンテンツのハッシュ (理想的には Git からプル) を取得し、そのハッシュの下に格納されているアーティファクトを共有バイナリ リポジトリで検索するプラグインを追加することです。見つかった場合は、そのアーティファクトを使用し、完全なビルドは実行しません。キャッシュに何も見つからない場合は、通常どおりビルドを実行し、アーティファクトをキャッシュに保存します。また、依存関係 (直接的または一時的) があり、キャッシュ ミスがあったモジュールを再構築することもお勧めします。

すでにこのようなことをするものはありますか? そうでない場合、それを Maven に追加する最もクリーンな方法は何でしょうか? プラグインで実現できるようですが、Maven に接続する正しい方法を見つけるのに苦労しています。具体的には:

  1. 「インストール」ゴールを傍受してキャッシュをチェックし、キャッシュミス時にモジュールの「ネイティブ」インストールゴールのみを呼び出すにはどうすればよいですか?
  2. 変更を伴う依存関係の再構築を強制するために、どのキャッシュ ミスが発生したかに関して、プラグインはどのようにあるモジュールから別のモジュールに状態を渡す必要がありますか?

私はまた、同じ最終結果を達成するための完全に異なる方法 (冗長ビルドの削減) に対してもオープンです。

4

2 に答える 2

1

私は以前、アーティファクト バージョンの操作とプライベート Maven リポジトリへのデプロイを使用して、より複雑なソリューションを実装しました。ただし、これはあなたのニーズによりよく適合し、やや単純だと思います。

  1. ビルドを複数のビルドに分割します (たとえば、maven-pl引数を使用してモジュールごとに 1 つのビルドを使用)。
  2. これらのビルド間に親子関係を設定します。(Bamboo には、Maven の依存関係を把握するための追加サポートもありますが、それがどのように機能するかはわかりません。)
  3. 別のローカル リポジトリの場所を使用するように Maven settings.xml を構成します。ビルド作業ディレクトリ内に新しいディレクトリを指定します。ドキュメントを参照してください: https://maven.apache.org/guides/mini/guide-configuring-maven.html
  4. 目標を使用mvn installして、新しく構築されたアーティファクトがローカル リポジトリに追加されるようにする
  5. Bamboo アーティファクトの共有を使用して、ビルドされたアーティファクトをローカル リポジトリから公開します。これをフィルタリングして、関心のあるパッケージのみを含める必要があります。
  6. 依存ビルドを設定して、親ビルドからすべての成果物をダウンロードし、それらをローカル リポジトリの適切なサブディレクトリ (作業ディレクトリになるようにカスタマイズされています) に配置します。

これは、Bamboo がブランチ ビルドの親子関係を処理する方法のおかげで、フィーチャー ブランチ ビルドでも機能するはずです。

これは、Maven が他のすべての依存関係を再ダウンロードすることを意味するため、Artifactory や Nexus などのローカル ネットワークでプロキシ プライベート Maven リポジトリを使用する必要があることに注意してください。

必要に応じて、アーティファクト バージョンの変更とプライベート Maven リポジトリへのデプロイを含む、既に実装したより複雑なシナリオについて説明することもできます。

于 2016-05-12T10:52:15.493 に答える