4

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

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

  1. 使用带有时间戳的工件的快照
  2. 使用 jenkins 作业和标记 svn 将单个工件提升到存储库。
  3. 使用 mvn version:set 命令为每个需要依赖项的项目更新依赖项。

有没有人实施类似于上述的解决方案?如果是这样,您遇到了什么问题?

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

4

1 回答 1

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>

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

此外,我会重新考虑更改项目结构,因为根据您所写的有关依赖项的内容,这些项目看起来应该一起发布,因此从它们中创建多模块构建可能是一个好主意。

此外,可以通过在 Jenkins 中使用可以处理依赖项的适当作业来完成重建,或者您可以考虑使用构建管道插件来处理此类事情。

但是我想到了另一个问题:为什么你的构建需要这么长时间?您可能会调查他们为什么要花这么长时间并总体上减少发布时间。

于 2012-11-20T07:37:57.743 回答