3

在版本控制、发布和 osgi 包方面,我找不到我的多模块 maven 项目的最佳实践,

首先是版本控制和发布。我的项目有 5-6 个子模块和 200+ jar 所以想使用聚合,

案例一:不指定项目版本,使用父版本

  • 在这种情况下,如果我使用 maven 发布插件,标记和 pom.next 都可以用于开发(好的意味着 jar3 将始终使用与自身相同的最新版本的 jar1)但是如果我只需要为 jar1 制作补丁发布怎么办?我如何设法发布(它说由于未发布的依赖项父:0.0.2-SNAPSHOT 无法发布项目),如果我设法发布 jar1 0.0.1.1,如何说 jar3 使用 jar1 的修补版本?

    Parent Proejct (0.0.1-Snapshot)
     Module1
      Jar1
      Jar2
     Module2
       Jar3
        (dependencies)[Jar1(project.version),Jar2(project.version)]
      Jar4
        (dependencies)[Jar1(project.version),Jar3(project.version) ]

案例 2:也许在父 pom 的属性文件中指定 jar 版本是个好主意

  • 在这种情况下,当我检查 pom.next 时不幸使用发布插件时,我看到 jar 版本和依赖版本都恢复为硬编码而不是属性(jar1.version),因此对于下一个版本,我将无法使用属性,并且第二个问题是即使我设法解决了第一个问题 maven 发布插件不会更改属性,所以下一个版本将使用属性中未修改的版本

    父项目
     属性
      jar1.version
      jar2.version
      jar3.version
      jar4.version
     Module1
      Jar1(jar1.version)
      Jar2(jar2.version)
     Module2(0.0.1-Snapshot)
      Jar3(jar3.version)
       (依赖)[Jar1,Jar2]
      Jar4(0.0.1-Snapshot)
       (依赖)[Jar1,Jar3]

我有点困惑,没想到发布和补丁程序会那么困难,用 maven 管理这种需求的最佳方法是什么

4

1 回答 1

0

最后,我设法通过 //dependencyManagement\ 支持我的多模块项目的发布(版本)管理

我的父母 pom

    <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>

和我的模块 1 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>hophop1</artifactId>
 <version>0.0.1-SNAPSHOT</version>

 <scm>
  <connection>seyn</connection>
  <developerConnection>seyn</developerConnection>
  <url>seyn</url>
 </scm>

</project>

我的模块 2 pom 依赖于模块 1:

    <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>
于 2011-01-03T19:30:03.067 回答