让我们从一些基础知识开始:
- 预提交挂钩在服务器而不是客户端上运行。默认没有工作目录。您必须确保它
javac
可用,并且是正确的版本。
- 您的预提交挂钩将冻结用户的终端直到完成。
现在,签出 Java 项目的新副本、运行 Ant、等待它编译、然后处理编译的输出需要多长时间?一两分钟?20秒?10秒?当你等待 Git 推送完成时,即使是 10 秒也会感觉很漫长。而且,如果其他用户想要提交代码,他们也必须等待。
更好、更简单的方法是使用像Jenkins这样的持续构建服务器。詹金斯很容易设置。(它内置了自己的应用程序服务器)并具有数百个插件,您可以使用它们来帮助报告项目的健康状况。如果无法进行编译,Jenkins 将通过电子邮件向罪魁祸首和您提到的任何其他人发送电子邮件。
我们有我们的 Jenkins 设置来进行 Ant 构建、Maven 构建,并使用 Git 或 Subversion 作为我们的存储库(取决于项目)。Jenkins 构建项目,保留控制台日志,如果失败则构建build.xml
失败。在我们这里,这意味着我开始纠缠开发人员解决问题或撤消他们的更改。在我上一个工作场所,开发人员有 10 分钟的时间来修复构建,否则我会撤消他们的更改。
Jenkins 不仅可以在构建失败时通知您,而且具有可以报告 Java 编译器警告、Javadoc 警告、运行Findbugs、PMD、查找重复代码行(通过 PMD 附带的 CPD)的插件,然后报告所有内容在一系列图表中。您还可以将构建标记为不稳定(构建完成,但存在问题)或根据使用这些工具发现的问题数量简单地使构建失败。
Jenkins 还可以运行单元测试,再次绘制结果,然后使用JaCoCo或Cobertura或Emma运行覆盖率分析。
所以,看看詹金斯。它易于设置,并且可以完全按照您的意愿进行操作,甚至更多。