1

個々のモジュールを構築し、親pomへの変更がローカルリポジトリにアップロードされるようにするためのMavenの方法は何ですか?

3つのモジュールがあるとしましょう:1つの親、2つの子(dbmod、appmod)

  • 親:dependencyManagementはjdbc-foo1.5を定義します
  • dbmod:依存関係はjdbc-fooが親からバージョンを取得することを定義します
  • appmod:dbmodに依存します

状況

  1. 私は、jdbc-foo 1.5でparent-pomを取得し、jdbc-foo1.5とappmodを使用してdbmodを取得する親からビルドします。
  2. ソース管理と親pomの変更をjdbc-foo1.6に更新します
  3. dbmodディレクトリにビルドします
  4. appmodディレクトリにビルドします

    appmodはローカルリポジトリからdbmodをフェッチし、親pommavenの問題のローカルリポジトリバージョンを使用します。 dbmod:3.5.0の効果的なモデルの構築中に1つの問題が発生しました-SNAPSHOT "

    コードがjdbc-foo1.6の変更へのアクセスに依存しているため、コンパイルが失敗します

オプション

私はこれらの方法で問題を解決することができます:

  • 問題の親pomファイルを手動でインストールします(mvn install-file ...)
  • 親からビルドする不要なビルド:すべてのモジュールを常にビルドします
  • 親からビルドして、目的のプロジェクトを選択し、また-make(mvn -am -pl:appmod ...)を使用します。 不要なビルド:すべてのdepsを常にビルドする必要があります

最初のオプションは、私がそれを行う必要があることを知る必要があるため、問題です。2番目と3番目のオプションでも、それを実行する必要があることを理解するか、大規模なシステムで問題になる可能性のあるすべてのdeps/allmodを常に構築する必要があります。

「-am-pl:mod」以外の親インストールを強制する構成設定がある場合、またはこれは状況を処理するための「Mavenの方法」ですか?

ありがとう

ピーター

(Mavenが実行できない場合は、親をローカルリポジトリの親と照合し、差分にインストールを強制するラッパースクリプトを修正できます)

4

2 に答える 2

0

親 pom からのビルドは問題ありません。これは、あなたが言及したリアクター オプションと合わせて推奨される方法です。また、クリーンに実行しなければ、不必要な労力が重複することはありません。

于 2012-09-23T04:44:28.443 に答える
-1

Maven の方法は、常に親から構築することです。すべてのモジュールをビルドする際の問題は正確には何ですか? コードに変更がなければ、 maven は実際にサブモジュールを再構築しないと確信しているので、かなり高速です。しかし、それがあったとしても、なぜこれがあなたにとって問題なのですか?

もう 1 つの試みは<relativePath>、モジュールの親宣言で使用することです。そうすれば、maven は、インストールされた親アーティファクトからではなく、ファイル システムから親 pom を取得します。

<parent>
  <groupId>com.mycompany.app</groupId>
  <artifactId>myapp</artifactId>
  <version>${app.version}</version>
  <relativePath>.../parent/pom.xml</relativePath>
</parent>
于 2012-09-22T01:11:07.433 に答える