就在大约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版):
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是绝对不能自动化这个过程的,如果你这么做的话,发布插件会让你掉入陷阱中。发布插件只是组合了版本、源代码管理、文档功能的插件,严重违背了单一责任的原则。这也是Maven被一些人诋毁的原因之一。这值得来一次大整修,如果要问我怎么修的话,我会把它去掉。发布软件是一个过程而不是单单命令行上的一个命令。
虽然上述的过程并不是那么完美,但是它很有用,我会避免使用发布插件因为它帮我做了太多的事。祝你们Maven用的愉快,但请让它保持干净。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务