適切なリリースとバージョンの構造でマルチモジュールMavenプロジェクトをセットアップする方法
-
14-10-2019 - |
質問
バージョン、リリース、OSGIバンドルの観点から、マルチモジュールMavenプロジェクトのベストプラクティスを見つけることができませんでした。
まず、バージョン化とリラースを取ります。私のプロジェクトには200 jarを備えた5-6のサブモジュールがあるため、集約を使用したいと考えています。
ケース1:プロジェクトバージョンを指定しないで、親バージョンを使用しない
この場合、Mavenリリースプラグインの両方を使用する場合、タグ付けとpom.nextの両方が開発にOKです(OKはJAR3が常にそれ自体と同じJAR1の最新バージョンを使用します)が、JAR1のみのパッチリラゼを作成する必要がある場合はどうなりますか?リラゼを作成するにはどうすればよいですか(リリースされていない依存関係のためにプロジェクトをリリースできないと書かれています:0.0.2-snapshot)。
親proejct(0.0.1-snapshot)
モジュール1
jar1
jar2
モジュール2
jar3
(依存関係)[jar1(project.version)、jar2(project.version)]
jar4
(依存関係)[jar1(project.version)、jar3(project.version)
ケース2:親pomのプロパティファイルにJARバージョンを指定することをお勧めします
この場合、リリースプラグインを不幸に使用する場合、pom.nextを確認すると、JARバージョンと依存関係の両方のバージョンがプロパティ(JAR1.version)の代わりにハードコードされていることがわかります。 2番目の問題は、1つの問題を解決することでさえ、Mavenリリースプラグインがプロパティを変更しないため、次のリリースでプロパティから未修飾バージョンを使用することです
親proejct
プロパティ
jar1.version
jar2.version
jar3.version
jar4.version
モジュール1
jar1(jar1.version)
jar2(jar2.version)
module2(0.0.1-snapshot)
jar3(jar3.version)
(依存関係)[JAR1、JAR2
jar4(0.0.1-snapshot)
(依存関係)[JAR1、JAR3
私はちょっと混乱していて、リラーズとパッチの手順がそれほど難しいとは思わなかった。
解決
最後に、// DependencyManagement を使用したマルチモジュールプロジェクトのリリース(バージョン)管理をサポートすることができました。
私の親のポン
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.seyn</groupId>
<artifactId>hophop</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>hophop</name>
<scm>
<connection></connection>
<developerConnection></developerConnection>
<url></url>
</scm>
<properties>
<hophop1.version>0.0.1-SNAPSHOT</hophop1.version>
<hophop2.version>0.0.1-SNAPSHOT</hophop2.version>
</properties>
<modules>
<module>../hophop1</module>
<module>../hophop2</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.seyn</groupId>
<artifactId>hophop1</artifactId>
<version>${hophop1.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
そして私のモジュール1POM:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>hophop</artifactId>
<groupId>com.seyn</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>..\hophop</relativePath>
</parent>
<groupId>com.seyn</groupId>
<artifactId>hophop1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scm>
<connection>seyn</connection>
<developerConnection>seyn</developerConnection>
<url>seyn</url>
</scm>
</project>
モジュール1に依存する私のモジュール2 POM:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>hophop</artifactId>
<groupId>com.seyn</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>..\hophop</relativePath>
</parent>
<groupId>com.seyn</groupId>
<artifactId>hophop2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scm>
<connection>seyn</connection>
<developerConnection>seyn</developerConnection>
<url>seyn</url>
</scm>
<dependencies>
<dependency>
<groupId>com.seyn</groupId>
<artifactId>hophop1</artifactId>
</dependency>
</dependencies>
</project>