1

次のように、サブモジュールの 1 つが別のモジュールに依存しているマルチモジュール プロジェクトがあります。

pom.xml (parent pom)
|
+---- pom.xml (project A)
|
+---- pom.xml (project B) depends on A

オプション「インクリメンタルビルド」(Mavenジョブタイプ)を使用して、ジェンキンスでビルドしています。私の問題は、プロジェクト B のみが変更されている場合(つまり、ジェンキンスがプロジェクト Bのみをビルドしていることを意味します)、プロジェクト A の「ターゲット」ディレクトリにあるバイナリ (以前のビルドで生成されたもの) を使用する代わりに、ジェンキンスがプロジェクト A から最新のスナップショットをダウンロードしていることです。 )。

フル ビルドがトリガーされると、問題はなくなり、Jenkins は正しいバイナリを使用します。誰も同じ問題を抱えていますか?

ありがとう!

4

1 に答える 1

1

それは問題ではなく、mavenの動作方法です。マルチモジュール ビルドの場合でも、アーティファクトは常にリポジトリから取得されます。ツリー全体をビルドしても、ローカル リポジトリからプルされたアーティファクトは、ビルドがほんの数分前に配置したものであるため、気付かないだけです。

プロジェクト B のルート ディレクトリに対してコマンド プロンプトを開き、コマンド ラインから maven ビルドを実行した場合、まったく同じ動作が得られます。maven は、ローカル リポジトリ (および見つからない場合はリモート) で A を検索し、検索しません。 A の /target ディレクトリにあります。

これが標準の Maven である場合、ルート ディレクトリから Maven のalso-make フラグを使用して、maven にプロジェクト B と B のすべての依存関係をビルドするように指示できます。これにより、Maven は A もビルドします。

于 2013-07-04T11:06:05.437 に答える