有时,开发人员意外地在POM中签入一个没有“SNAPSHOT”的版本 . 这将构建Maven项目并发布工件以释放存储库 . 我该如何避免这种情况?我只想发布构建工件来发布存储库而不是CI构建 .
我想到了以下几点 - 但它们都不是一个简单的一步解决方案
-
编写一个预提交钩子,检查版本是否在没有SNAPSHOT的情况下被允许执行发布版本的管理员以外的任何人签入;
-
修改Jenkins作业以查看构建是否为CI构建;如果版本不是SNAPSHOT版本,那么grep版本和错误输出 . 为此,我需要修改100个工作 .
1 回答
解决这个问题的一个好方法是利用Maven Enforcer Plugin .
更新至1.4.2
从版本1.4.2开始(尚未发布,请参阅增强请求MENFORCER-204),有一个新的
requireSnapshotVersion
规则,该规则强制正在构建的项目具有快照版本 .编写自定义规则
直到版本1.4.1,如果当前项目是SNAPSHOT版本,则没有内置规则失败,但我们仍然可以使用evaluateBeanshell规则 .
我们的想法是使构建失败,默认情况下版本不是快照版本 . 当当前项目处于发布时,禁用该规则 .
为此,您可以在POM中拥有以下内容:
这样做是执行一个评估项目版本的BeanShell脚本 . 如果它以
-SNAPSHOT
结束,则规则通过,否则规则将失败并且构建结束 . 确定版本是否为快照 . (快照版本的严格规则是more complicated,但这应涵盖所有用例) . 因此,这样的规则将验证正在构建的项目是否具有SNAPSHOT版本 .上述两种配置都将Maven属性声明为
当在SNAPSHOT版本上运行
mvn deploy
时,它们将使您的构建失败,确保没有意外地将SNAPSHOT部署到版本库 .然后,在执行发布时需要禁用该规则 . 为此,我们可以定义一个
release
配置文件来禁用已定义的规则:并在发布时激活该配置文件