適切なリリースとバージョンの構造でマルチモジュールMavenプロジェクトをセットアップする方法

StackOverflow https://stackoverflow.com/questions/4584296

質問

バージョン、リリース、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>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top