2

多くの依存プロジェクト間で内部ライブラリ バージョンの大規模なセットを管理するのに役立つツールやベスト プラクティスはありますか。詳しく説明させてください。

製品 A、B、C があるとします。これらの製品はライブラリ X、Y、Z に依存しており、それらにも依存関係があります。

この世界では、すべての依存関係の最新リリースバージョンにすべてのバージョンを維持したいと考えています (作業コピー以外のスナップショットの依存関係はありません)。これにより、いつでも製品をリリースし、すべてのプロジェクトを CI (Hudson) で実行することができます。

問題は、pom.xml をすべて最新の状態に保つことです。現在、各リリースの一部として、リリースされるプロジェクトに依存する pom.xml を SCM で検索して更新するカスタム Maven プラグインを使用しています。これは、各プロジェクトの作業コピーが必要ないことを除いて、 versions-maven-plugin に似ています。

もっと良い方法があるはずです。他のチームは、多くのプロジェクトにまたがる多くの共有ライブラリについて何をしていますか? これを整理する最良の方法は何ですか?マルチモジュールが機能する場合もありますが、私たちのライブラリのほとんどはかなり独立しており、あまりにも多くの他のプロジェクトで (a) どのマルチモジュールにログするかを決定し、(b) これに対して機能する階層を決定するために使用されています。

4

2 に答える 2

2

Maven での依存関係の管理は、dependencyManagement で問題なく機能します - あなたはそれに精通していると思います。この依存関係管理を専用の POM、いわゆる BOM POM に外部委託することができます ( http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.htmlを参照)。

あなたの場合、この BOM POM は製品 A、B、および C で共有される可能性があります。そのため、この BOM POM だけを含む Maven プロジェクトを、サードパーティ ソフトウェア X、Y、および Z のすべての依存関係管理と共に定義する必要があります。このプロジェクトは、リリースされ、スコープ インポートを使用して BOM POM に依存関係を追加できます。

BOM POM:

<project>
   <groupId>com.acme</groupId>
   <artifactId>my-thirdparty-bom-pom</artifactId>
   <version>1.0-SNAPSHOT</version>
   ...
   <dependencyManagement>
     <dependencies>
       <dependency>
         <groupId>...</groupId>
         <artifactId>X</artifactId>
         <version>...</version>
       </dependency>
       <dependency>
         <groupId>...</groupId>
         <artifactId>Y</artifactId>
         <version>...</version>
       </dependency>
       <dependency>
         <groupId>...</groupId>
         <artifactId>Z</artifactId>
         <version>...</version>
       </dependency>
     </dependencies>
   <dependencyManagement>
   ...
</project>

プロジェクト A のサンプル インポート

<project>
   ...
   <dependencyManagement>
     <dependencies>
       <dependency>
         <groupId>com.acme</groupId>
         <artifactId>my-thirdparty-bom-pom</artifactId>
         <version>1.0-SNAPSHOT</version>
         <scope>import</scope>
       <dependency>           
     </dependencies>
   <dependencyManagement>

   <dependencies>
     <dependency>
       <groupId>...</groupId>
       <artifactId>Y</artifactId>
       <!-- the version is managed by the thirdparty bom imported above -->
     </dependency>
   </dependencies>
   ...
</project>
于 2012-11-20T14:55:43.037 に答える
0

最も近いのは、依存関係のバージョン範囲を使用し、プロファイルで pom のリポジトリをオーバーライドしてスナップショットを falseに変更し、リリース中にプロファイルを「-P」で含めるようにすることです。

<dependency>
  <groupId>a</groupId>
  <artifactId>a</artifactId>
  <version>[3.8,4.0)</version>
</dependency>

...

<profiles>
 <profile>
  <id>your-release</id>
  <repositories>
    <repository>
     ...
     <snapshots>
       <enabled>false</enabled>
     </snapshots>
    </repository>
  </repositories>
 </profile>
<profiles>  

もう 1 つのパターンは"bom"です。これにより、依存関係のリストを宣言する pom (パッケージ: pom) を作成して、管理を容易にする (変更を少なくする) ことができます。

于 2012-11-20T15:02:39.390 に答える