问题:
20个不同的JAVA项目,具有很多相互依赖关系.每次代码锁定后都有错误修复,我们必须根据需要发布一堆工件,具体取决于更改的工件.例如,如果工件3有解锁并需要修复错误,我们将需要发布(使用maven发布插件)项目3,4,5,6,7和10(因为4,5,6,7和10是取决于3).团队之间的协调以完成这项任务需要时间.加上每个神器的建造需要20-40分钟.
我们想缩短这个过程.我们正在考虑以下事项:
>将快照用于带有时间戳的工件
>使用jenkins作业和标记svn将单个工件升级到存储库.
>使用mvn version:set命令为需要依赖项的每个项目更新依赖项.
有没有人实现类似于上述的解决方案?如果是这样,你遇到了什么问题?
任何其他建议不会重建工件,并允许我们只需点击一个按钮释放15-20个工件将有帮助:)
最佳答案 不幸的是,如果更改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来处理这些事情.
但是我想到了另外一个问题:为什么你的构建需要这么长时间?你可能会调查他们为什么花这么长时间来减少释放时间.