2

我正在尝试为具有两个分支的项目统一两个 CI 配置文件。master分支包含每晚构建一次的生产分支,分支dev包含开发分支。

为了自动化-SNAPSHOTDEV 分支上的后缀,我应用了以下 POM。

<version>1.1.11${build.suffix}</version>
<properties>
    <build.suffix>-SNAPSHOT</build.suffix>
</properties>

然后我有两个构建配置,一个在 jenkins 中-Dbuild.suffix=".$BUILD_NUMBER"分配给prod MAVEN_OPTS,但 maven 似乎总是在没有后缀的情况下构建,并且总是放在-SNAPSHOT每个构建的末尾。

在本地运行它工作正常,即

mvn -Dbuild.suffix=".123" clean package

工作正常。

我也收到以下警告,有没有更好的方法来做我想做的事情?

[WARNING] 
[WARNING] Some problems were encountered while building the effective model for com.johnsands:unite:war:1.1.11-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.johnsands:unite:1.1.11${build.suffix}, /Users/bryan/Development/unite/pom.xml, line 11, column 12
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
4

3 回答 3

1

maven 不再允许在标签中使用表达式是有原因的。<version>复制/粘贴相关行...

部署的 pom 不会解析属性值,因此任何依赖该 pom 的人都会将依赖项视为未使用 ${ } 插值的字符串,并且在您的构建过程中会出现很多欢闹。

您可以特别查看maven 版本插件mvn version:set但这会更改pom.xml文件并且在 CI 环境中没有意义。

于 2013-10-25T08:14:11.443 回答
0

这是我为那些需要帮助的人所做的。

  1. 根据Raghuram 的建议,我正在使用maven 版本插件来设置版本。
  2. 我的 DEV 分支总是包含-SNAPSHOT文本,prod 分支是可选的。
  3. 我在 PROD 上使用预构建脚本来提取版本,删除-SNAPSHOT文本.$BUILD_NUMBER并附加到版本,然后使用versions:set 设置
  4. 然后,构建后脚本将恢复版本插件为我们备份的原始 pom。

所以把它放在一起。

预构建脚本:如果有人能告诉我一种更简洁的方法来获取我想知道的版本号:

ver=$(sed -n '/<version>/{p;q;}' pom.xml|grep '<version>'|sed 's/.*>\(.*\)<.*/\1/' | sed 's/-SNAPSHOT//').$BUILD_NUMBER
echo "Setting version to $ver"
mvn -DnewVersion="$ver" versions:set

构建后脚本

test -f pom.xml.versionsBackup && mv pom.xml.versionsBackup pom.xml 

开发周期现在确保了通常快速合并的 bugfix 分支不需要更新 pom 中的版本号,然后可以安全地合并回 prod 分支。

于 2013-10-28T00:22:18.340 回答
0

通常 SNAPSHOT 用于开发分支(master、prod、dev 等)。所以离开 SNAPSHOT 是 prod 分支很好。更好的解决方案是使用 XXX-FINAL-SNAPSHOT 之类的示例对 master/prod 工件进行版本控制,或者使用 XXX-DEV-SNAPSHOT 对 dev 分支进行版本控制。

从 master/prod 发布的产品应该有版本 -XXX,maven-release-plugin 为你做这个。

于 2013-10-25T09:41:04.987 回答