maven - Maven父子pom使用Azure devops自增版本
问题描述
我在 JHipster 上构建了多个微服务,这些微服务过去是使用 Maven 单独构建的。现在我们有一个父 pom,它将拥有所有可以多次构建的 API 的所有公共依赖项,并多次部署父 pom 的相同版本。所有的 API 都将使用它作为父 pom。问题是我们在构建过程中使用 Azure DevOps,其中常见的工件被发送到 Azure Artifacts,并且版本是不可变的。因此,如果要构建这个父 pom 并将其打包到 Azure Artifacts 中,我需要弄清楚以下内容。
- 如何根据所做的更改自动增加或不自动增加父 pom 的版本。(为此,我尝试使用 maven-release-plugin 并自动增加版本,但如果有任何最佳实践,请告诉我,我现在使用默认值。计划在child pom 也是如此,但不确定这是否是正确的方法)
- 如何确保使用此父 pom 的子项目能够在发布期间自动增加版本。
PS:之前我们遇到了一个问题,即对公共存储库进行任何更改,都需要开发人员在构建之前手动调整 pom 的版本,因为 Azure Artifacts 不允许构建相同的版本并将其部署到 Artifacts。
解决方案
您可以尝试在构建管道运行期间为父 pom 和每个子 pom 的版本生成一个变量。例如:PARENT_PACKAGE_VERSION
, CHILD_01_PACKAGE_VERSION
, CHILD_02_PACKAGE_VERSION
, ...
变量可以通过一些量和变量组合(包括自定义变量、预定义变量和一些表达式)。这样,您几乎可以尽可能自由地设置版本号。
在文件中,您可以使用变量名称pom.xml
填充版本字段。
在管道中,设置一个shell脚本,使用if条件判断是否改变变量的值。然后用文件中的实际值替换变量名pom.xml
。
例如:
sed -i 's/PACKAGE_VERSION/$(PACKAGE_VERSION)/g' pom.xml
完成上述步骤后,构建并发布 Maven 包。
对于父 pom 的版本,为避免发布相同版本号到 Azure Artifacts 导致的错误,您可以设置更多节点的版本号,例如<MajorVersion>.<MinorVersion>.<BatchVersion>
. MajorVersion和MinorVersion可能不会经常更改。当父包和/或子包中发生任何更新时,可以更改或自动增加BatchVersion 。
推荐阅读
- flutter - 颤振图像未显示在谷歌标记上
- reactjs - 无法读取地理位置中未定义的属性“协调”
- android - 缩小apk时,Amplify.Auth.fetchAuthSession() userPoolTokens为空
- r - 使用 mutate_at 和 max() 函数在 R 中使用自己的数据尝试代码。出现警告消息:max 没有非缺失参数
- git - 当我们使用 git add 时合并是如何工作的
? - reactjs - 错误:找不到模块:无法解析“/home/rakesh95/Projects/webapp/node_modules/quickblox/src/modules/chat”中的“nativescript-xmpp-client”
- php - Laravel - 在控制器内部验证而不进行 CustomRequest
- python - 获取不同范围的所有 numpy 切片的有效方法
- azure - Azure ARM 模板:表达式作为非字符串或具有允许值的参数的默认值
- qt - 在 CLion 中,Qt Console 和 Qt Widgets Executable 项目模板有什么区别