8

子モジュールが個別にバージョン管理されるリアクター pom があります。子モジュールは、メイン pom のバージョンから独立した独自のバージョンを宣言します。ただし、2 つの子モジュール間には依存関係があります。リアクター pom の実際のモジュールによって宣言されているバージョンを常に使用するように、この依存関係をどのように構成する必要がありますか?

ルート pom で依存関係管理を設定し、いくつかの暗黙的なプロパティを使用して子モジュールのバージョンを決定できると期待していますが、私が見つけることができる最良のオプションは次のとおりです。

${session.projectDependencyGraph.sortedProjects[0].version} 

または単に

${reactorProjects[0].version}

ルート pom の依存関係管理は次のようになります。

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>mygroup</groupId>
      <artifactId>mySubmodule</artifactid>
      <version>${reactorProjects[0].version}</version>
    </dependency>
  </dependencies>
</dependencyManagement>

新しいモジュールまたは依存関係が追加されるとリアクターの順序が変わる可能性があるため、信頼性がないように見えます。

たぶん、この使用シナリオは設計上推奨されていないので、その理由を知りたいです。

編集:コメントで示唆されているように、親 POM で子バージョンを持つグローバル プロパティを宣言することは、Maven の新しいバージョンのオプションになる場合があります。ただし、ワークフロー、リリース、ディレクトリとリポジトリの設定、一部のプラグインの使用法 (バージョン プラグインなど) など、より幅広い結果に関する分析を見たいと思います。たとえば、このアプローチの直接的な結果は、リリースする必要があることだと思います。子モジュールのいずれかがリリースされるたびに、親モジュール。これは実行可能ですが、独立したバージョン管理を行うという当初のアイデアに影響を与える可能性があります。

4

2 に答える 2

0

親pomでdependencyManagementを使用することをお勧めします。そこでは、すべての依存関係のすべての de バージョンを定義できます。その後、さまざまなモジュールで依存関係のバージョンを省略できます

したがって、親では:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>mygroup</groupId>
      <artifactId>myModule</artifactid>
      <version>1.2.3</version>
    </dependency>
  </dependencies>
</dependencyManagement>

次に使用するモジュールで

  <dependencies>
    <dependency>
      <groupId>mygroup</groupId>
      <artifactId>myModule</artifactid>
    </dependency>
  </dependencies>

dependencyManagement で定義されているバージョンが使用されます。

親 pom で、このようにすべての依存関係のバージョンを定義することをお勧めします。

于 2015-07-01T10:46:03.933 に答える
0

Maven メーリング リストでこのトピックのスレッドを開始しました。ここに TL;DR の回答を投稿しています。

ビルド中だけでなく、ビルドされたアーティファクトを他のプロジェクトの依存関係として使用するときにも評価され、暗黙のプロパティのコンテキストが完全に異なるため、その評価は予測できない結果になる可能性があるため、暗黙のプロパティを使用した私の予想されるソリューションは一般的に不可能です。 . (私は愚かです、私は ${project.version} プロパティですでに同じ問題を抱えていました)

一般的に言えば、この質問では、1 つの開発者の観点から 1 つのプロジェクトで 1 つのシナリオのみを考慮します。メーリング リストのスレッドには、依存関係の管理または明示的なプロパティのいずれかで依存関係のバージョン番号をハードコーディングすることにつながる別の観点があります。

于 2015-07-07T11:38:18.597 に答える