在Java项目中获取所有构建错误的最快方法是什么?

时间:2013-09-24 19:22:04

标签: java eclipse git ant

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

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

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

4 个答案:

答案 0 :(得分:2)

让我们从一些基础开始:

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

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

更好,更简单的方法是使用 Continuous Build Server ,如Jenkins。詹金斯很容易设置。 (它内置了自己的应用程序服务器),并有数百个插件,可用于帮助报告项目的运行状况。如果编译不可能发生,詹金斯将通过电子邮件发送罪魁祸首和你提到的其他任何人。

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

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

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

所以,看看詹金斯。它易于设置,可以完全满足您的需求。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:-2)

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