2KB项目,专业的源码交易网站 帮助 收藏 每日签到

为什么我从来不使用 Maven 发布插件

  • 时间:2019-01-23 18:39 编辑:2KB 来源:2KB.COM 阅读:323
  • 扫一扫,手机访问
  • 分享
摘要:
Maven 英文原文:Why I Never Use the Maven Release Plugin

就在大约6个月前,有一篇辱骂Maven的文章同时攻击了Maven和Ant的支持者和反对者。虽然我觉得很好玩(当他们说要重新回到Ant的时候,我笑了),但基本都是在争论同样的问题:Maven缺乏灵活性,插件系统太糟糕了(什么时候才能学会使用插件版本号。。。),不能使用脚本,以及让人抓狂的发布插件。虽然非比寻常,但是你可能忘了,你根本不需要,甚至根本不应该用它。

插件的作者想要让Maven发布插件使软件发布变成一件轻而易举的事情,但出发点就错了。发布不是突发奇想就能干的,而是要精心策划协调组织的,并且遵循无数的规则。如果你把发布的所有过程打包成一个简单的mvn release:release,那就太幼稚了。就算是Maven最坚定的支持者也同意这个观点。Maven发布插件想要在一次做太多的东西:构建你的软件、打上标记(tag)、再构建一次、部署(deploy)、构建文档(site)(在这过程中又触发了另一次构建)、部署文档。在上述的过程中,运行了许多次测试(test)。在大多数时候,你只是在发布候选版本,所以构建一个完整的文档完全是在浪费时间。

现在,你如果把发布插件分解成合理的步骤,那么你将摆脱一大推麻烦。

我通过以下步骤来发布一些东西。注:我使用git和git-flow平台(这里所描述的),假设pom的当前版本是1.0-SNAPSHOT。

1.声明这次发布过程非常重要:正如我所说的,你不会一时兴起去发布一个版本。保证你的团队成员都知晓一个版本即将发布,同时让他们把自己的东西(代码和文档等)提交到即将发布的开发分支中以便被包含。

2.把开发分支分到发布分支里面:根据git-flow的规则,我将它定义为分支1.0。

3.修改此开发分支POM的版本:修改版本到下一个发布版本。比如maven命令:set -DnewVersion = 2.0-SNAPSHOT,然后commit到本地并push到服务器。现在你可以把你需要发布的资源发布到下个版本中。

4.修改此发布分支POM的版本号:修改版本到标准CR版本。比如maven命令:set -DnewVersion=1.0.CR-SNAPSHOT,然后commit到本地并push到服务器。

5.在发布分支上运行测试:运行所有测试,如果有一个或多个失败,那么首先解决它们。

6.从发布分支中创建一个候选发布版(RC版):

  • 使用maven版本插件来更新POM的版本。比如maven命令:set - DnewVersion=1.0.CR1,然后commit到本地并push到服务器。
  • 在git上做个标记。
  • 使用maven版本插件把POM的版本还原成标准CR版本。比如maven命令:set -DnewVersion=1.0.CR-SNAPSHOT。
  • commit到本地并push到服务器。
  • 检出新的标记。
  • 做一个部署构建(mvn clean deploy)。因为你刚刚运行过测试而且修复了所有的失败原因,所以此次构建应该不会失败。
  • 部署到QA环境。

7.在QA给此候选发布版给出绿灯(通过)之前一直迭代重复:
       1.修改缺陷:修改发布分支上的CR版本缺陷。定期(或者甚至连续)合并开发分支,连续运行测试,对失败的原因提出缺陷并同时修复它们。
        2.创建一个候选发布版:
            I.使用maven版本插件来更新POM的版本。比如maven命令:set- DnewVersion=1.0.CRx,然后commit到本地并push到服务器。
            II.在git上做个标记。
            III.使用maven版本插件把POM的版本还原成标准CR版本。比如maven命令:set -DnewVersion=1.0.CR-SNAPSHOT。
            IV.commit到本地并push到服务器。
            V.检出新的标记
            VI.做一个部署构建(mvn clean deploy)。因为你刚刚运行过测试而且修复了所有的失败原因,所以构建应该不会失败。
            VII.部署到QA环境。
8.一旦QA签字通过此次发布,就创建一个最终发布版:

  •  检查确保自最新版本后没有新的提交动作(如果有,告诉开发者他们做的东西此版本不需要或者不要求)。
  • 使用maven版本插件来更新POM的版本。比如maven命令:set - DnewVersion=1.0,然后commit到本地并push到服务器。
  • 标记此发布分支。
  • 合并到主分支。
  • 检出这个主分支。
  • 做一个部署构建(mvn clean deploy)。
  • 开始量产发布和部署过程(对大多数公司而言,是个不小的成就)。这可能涉及到网站的建设和做其他的东西,有些甚至和Maven不相关。

Maven是绝对不能自动化这个过程的,如果你这么做的话,发布插件会让你掉入陷阱中。发布插件只是组合了版本、源代码管理、文档功能的插件,严重违背了单一责任的原则。这也是Maven被一些人诋毁的原因之一。这值得来一次大整修,如果要问我怎么修的话,我会把它去掉。发布软件是一个过程而不是单单命令行上的一个命令。

虽然上述的过程并不是那么完美,但是它很有用,我会避免使用发布插件因为它帮我做了太多的事。祝你们Maven用的愉快,但请让它保持干净。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部