2

目前我正在考虑将一些构建过程集成到我的源代码控制中(特别是 Git 挂钩)。我正在尝试编写一个预提交挂钩来检查我的 Java 项目(一个中型测试开发项目)中的构建错误,并且无法允许在构建中包含错误的提交。这变得相当具有挑战性。

这里的方法使用命令行 Eclipse 工具来构建和输出警告和错误。这在技术上确实有效,但速度很慢并且可能会导致 Eclipse IDE 出现问题(我已经遇到了堆分配错误)。我也看过使用ant的解决方案,但这些方法似乎不是一个简单的单线解决方案,而且可能仍然很慢。

我的主要问题是:通过命令行构建和验证 Java 项目的最快(运行时编译速度)方法是什么?我想要一个返回 0 且没有错误的解决方案,如果存在错误,则返回其他内容,但我愿意查看其他内容。

4

4 回答 4

2

让我们从一些基础知识开始:

  • 预提交挂钩在服务器而不是客户端上运行。默认没有工作目录。您必须确保它javac可用,并且是正确的版本。
  • 您的预提交挂钩将冻结用户的终端直到完成。

现在,签出 Java 项目的新副本、运行 Ant、等待它编译、然后处理编译的输出需要多长时间?一两分钟?20秒?10秒?当你等待 Git 推送完成时,即使是 10 秒也会感觉很漫长。而且,如果其他用户想要提交代码,他们也必须等待。

更好、更简单的方法是使用像Jenkins这样的持续构建服务器。詹金斯很容易设置。(它内置了自己的应用程序服务器)并具有数百个插件,您可以使用它们来帮助报告项目的健康状况。如果无法进行编译,Jenkins 将通过电子邮件向罪魁祸首和您提到的任何其他人发送电子邮件。

我们有我们的 Jenkins 设置来进行 Ant 构建、Maven 构建,并使用 Git 或 Subversion 作为我们的存储库(取决于项目)。Jenkins 构建项目,保留控制台日志,如果失败则构建build.xml失败。在我们这里,这意味着我开始纠缠开发人员解决问题或撤消他们的更改。在我上一个工作场所,开发人员有 10 分钟的时间来修复构建,否则我会撤消他们的更改。

Jenkins 不仅可以在构建失败时通知您,而且具有可以报告 Java 编译器警告、Javadoc 警告、运行FindbugsPMD、查找重复代码行(通过 PMD 附带的 CPD)的插件,然后报告所有内容在一系列图表中。您还可以将构建标记为不稳定(构建完成,但存在问题)或根据使用这些工具发现的问题数量简单地使构建失败。

Jenkins 还可以运行单元测试,再次绘制结果,然后使用JaCoCoCoberturaEmma运行覆盖率分析。

所以,看看詹金斯。它易于设置,并且可以完全按照您的意愿进行操作,甚至更多。

于 2013-09-24T19:53:23.383 回答
1

蚂蚁。不会有“单线解决方案”。编写一个 ANT 脚本来编译代码,如果有任何错误则失败。这并不容易,但它是最好的选择。

于 2013-09-24T19:24:17.753 回答
0

在您提到的选择中,Ant 是最好的。但是让我们面对现实吧,编写 XML 很糟糕。我的猜测是,任何构建工具都会在编译失败时失败并返回错误代码。我最喜欢的是sbt,但是如果你不熟悉 Scala(甚至 Scala 中的那些人也喜欢抱怨 sbt),那么学习曲线会有点长。IMO 的另一个不错的选择是Gradle。您使用Groovy编写脚本,它是 Java 的动态类型超集。

于 2013-09-24T19:29:12.947 回答
-2

詹金斯可能是你可以看看的东西

于 2013-09-24T19:50:12.777 回答