关于我们
在1C,我们开发的不仅仅是一个平台
输入
我们最常使用 Maven 作为 Java 应用程序的构建系统,在这篇短文中,我们想谈谈我们在组织开发过程中必须面对的问题之一,以及帮助我们克服这个问题的方法问题。
先决条件和工作流程
由于我们的 Maven 项目开发的特殊性,我们使用了相当多的模块、依赖项和子项目。 一棵树中的pom文件数量可以是几十甚至上百个。
看起来:没什么大不了的,他们创建了一次就忘记了。 如果您需要一次更改或添加所有文件中的某些内容,编辑器和 IDE 中有很多方便的工具。 pom.xml 最常见的常规更改是什么? 我们认为项目版本和依赖项发生了变化。 也许有人会对此提出异议,但这正是我们的情况。 原因在于,我们在开发内核的同时,还同时开发了许多自己的库,并且为了构建和测试结果的持续可重复性,使用快照对我们来说似乎并不是一种方便的方法。 因此,有必要在每次构建时提高项目的版本号。
此外,开发人员有时需要构建自己的库分支并根据所有依赖项检查其功能,为此他必须手动更改所有依赖项的版本。
初步解决方案
由于如此频繁和多个版本更改,我希望简化 CI 内的流程并实现自动化。 这时,一个方便的、众所周知的插件就可以派上用场了。 版本-maven-插件 - 连接并启动它
mvn -N 版本:设置-DnewVersion=2.0.1
Maven 会做它应该做的一切:它将从上到下贯穿层次结构,替换所有版本 - 美! 现在剩下的就是提出 Pull Request,同事会审核更改,然后你就可以快速加入主干了。 迅速地? 不管怎样。 几百个 pom.xml 供审查,这还不包括代码。 此外,没有人能够避免与如此大量的更改文件发生合并冲突。 这里应该注意的是,在 CI 过程中,版本更改会随着功能的更改自动发生,而不是单独发生。
新功能
有一段时间,我们平静下来,辞职了,我们就这样生活,直到来自
mvn -Drevision=2.0.0 干净包
系统属性值优先于中定义的值 >.
选择优势
4.0.0
org.apache
阿帕奇
18
org.apache.maven.ci
ci-parent
第一个 CI 友好型
${修订}${sha1}${变更列表}
...
1.3.1
-快照
后裔
4.0.0
org.apache.maven.ci
ci-parent
${修订}${sha1}${变更列表}
org.apache.maven.ci
慈子
...
如果你想构建版本 2.0.0-SNAPSHOT,那么只需使用
mvn -Drevision=2.0.0 干净包
如果您想发布,只需重置 SNAPSHOT
mvn -Dchangelist=清理包
*以上例子取自
残酷的现实
一切都很好,很健康,是时候感到满足感了,但是没有。 事实证明,此方法不适用于安装和部署,因为它不会在存储库中发布的工件的描述中被替换 ${修订} 其含义和 maven 将不再理解它的全部内容。
org.apache
阿帕奇
${修订}
隧道尽头的一盏灯
我们需要寻找问题的解决方案。 本来可以挽救局面
向项目添加插件
org.codehaus.mojo
扁平化 Maven 插件
1.1.0
真的
仅解析 CiFriendlies
压扁
流程资源
压扁
展平.清洁
干净的
干净的
完成!
美满结局
从现在开始,为了更改整个项目的版本并让所有依赖项都知道它,我们只需要编辑该元素调整> 仅在根中 pom.xml。 这些具有相同更改的文件不是一百个或两个到达审查的,而是一个。 嗯,没必要用 版本-maven-插件.
来源: habr.com