Maven发布流程替代方案

时间:2012-11-20 01:14:36

标签: maven maven-2 jenkins release-management maven-release-plugin

问题: 20个不同的JAVA项目,具有很多相互依赖关系。每次代码锁定后都有错误修复,我们必须根据需要发布一堆工件,具体取决于更改的工件。例如,如果工件3有解锁并需要修复错误,我们将需要发布(使用maven发布插件)项目3,4,5,6,7和10(因为4,5,6,7和10是取决于3)。团队之间的协调以完成这项任务需要时间。加上每个神器的建造需要20-40分钟。

我们想缩短这个过程。我们正在考虑以下事项:

  1. 将快照用于带有时间戳的工件
  2. 使用jenkins作业和标记svn。
  3. 将单个工件提升到存储库
  4. 使用mvn version:set命令为需要依赖项的每个项目更新依赖项。
  5. 有没有人实施类似于上述的解决方案?如果是这样,你遇到了什么问题?

    任何其他不会重建工件并允许我们通过点击按钮释放15-20个工件的建议会有所帮助:)

1 个答案:

答案 0 :(得分:2)

不幸的是,如果更改pom文件,则必须重建工件。否则,您在VCS中的状态不代表您正在使用的状态。

让我们举个例子。项目A,项目B,其中B依赖于A:

项目A:pom.xml

   <version>1.0-SNAPSHOT</version>
   Some dependencies etc. 

项目B:pom.xml

   <version>1.0-SNAPSHOT</version>

   Some dependencies etc. 
   <dependency>
     <groupId>project.a</groupId>
     <artifactId>A</artifactId>
     <version>1.0-SNAPSHOT</version>
   </dependency>

现在构建项目A和B.存储库中的状态表示pom文件的状态/状态/依赖关系到SNAPSHOT。

现在,您将更改项目A以从中“释放”,但不会重建您的工件。比您的版本控制中的以下内容可能是您对其进行标记。

项目A:pom.xml

   <version>1.0</version>
   Some dependencies etc. 

其次,你对项目B做同样的事情: 项目B:pom.xml

   <version>1.0</version>

   Some dependencies etc. 
   <dependency>
     <groupId>project.a</groupId>
     <artifactId>A</artifactId>
     <version>1.0</version>
   </dependency>

但你也没有重建你的aritfact。结果是您的存储库确实包含表示SNAPSHOT状态的工件,但您的版本控制说明了不同的东西。这只是问题的一个非常简单的例子。如果你有更多的项目等,事情会变得更糟。

此外,我会重新思考如何更改项目结构,因为根据您所写的关于依赖项的内容,看起来这些项目应该一起发布,因此最好从它们创建多模块构建。

此外,重建可以通过在Jenkins中使用可以处理依赖关系的适当作业来完成,或者您可以考虑使用build pipeline plugin来处理这些事情。

但是我想到了另外一个问题:为什么你的构建需要这么长时间?您可以调查他们为什么花这么长时间并减少所有人的发布时间。