目前我正在考虑将一些构建过程集成到我的源代码控制中(具体是Git钩子)。我正在尝试编写一个预提交钩子来检查我的Java项目(一个中型大型测试开发项目)中的构建错误,并且无法允许包含构建中的错误的提交。结果证明这是相当具有挑战性的。
方法here使用命令行Eclipse工具来构建和输出警告和错误。这在技术上是有效的,但它很慢并且可能导致Eclipse IDE出现问题(我已经有堆分配错误)。我也看过使用ant的解决方案,但这些方法似乎不是一个简单的单行解决方案,可能仍然很慢。
我的主要问题:通过命令行构建和验证Java项目的最快(运行时编译速度)方式是什么?我想要一个没有错误的返回0的解决方案,如果存在错误则返回其他内容,但我愿意看看其他内容。
答案 0 :(得分:2)
让我们从一些基础开始:
javac
可用且版本正确。现在,签出Java项目的新副本,运行Ant,等待它编译,然后处理编译输出需要多长时间?一两分钟? 20秒? 10秒?当你等待Git推动完成时,即使10秒也会感觉永远。而且,如果其他用户想要提交代码,他们也必须等待。
更好,更简单的方法是使用 Continuous Build Server ,如Jenkins。詹金斯很容易设置。 (它内置了自己的应用程序服务器),并有数百个插件,可用于帮助报告项目的运行状况。如果编译不可能发生,詹金斯将通过电子邮件发送罪魁祸首和你提到的其他任何人。
我们让Jenkins设置为Ant构建,Maven构建,并使用Git或Subversion作为我们的存储库(取决于项目)。 Jenkins构建项目,保留控制台日志,如果build.xml
失败,将失败构建。在我们的位置,这意味着我开始纠缠开发人员来解决问题或撤消他们的更改。在我上一个工作场所,开发人员有10分钟的时间来修复构建,或者我会撤消他们的更改。
Jenkins不仅可以让您知道构建失败的时间,还有可以报告Java编译器警告的插件,Javadoc警告,运行Findbugs,PMD,找到重复的代码行(通过CPD附带的CPD),然后在一系列图表中报告所有内容。您还可以将构建标记为不稳定(构建完成但存在问题),或者根据使用这些工具发现的问题数量使构建失败。
Jenkins也可以运行单元测试,并再次绘制结果图表,然后使用JaCoCo或Cobertura或Emma进行覆盖率分析。
所以,看看詹金斯。它易于设置,可以完全满足您的需求。
答案 1 :(得分:1)
蚂蚁。不会有“一线解决方案”。编写一个编译代码的ANT脚本,如果有任何错误则会失败。这并不容易,但这是最好的选择。
答案 2 :(得分:0)
在你提到的选择中,Ant是最好的。但让我们面对它,写XML很糟糕。我的猜测是,任何构建工具都会失败并在编译失败时返回错误代码。我最喜欢的是sbt,但如果你没有进入Scala(甚至那些在Scala中的人喜欢抱怨sbt),那么学习曲线会有一些。另一个很好的选择IMO是Gradle。您可以在Groovy中编写脚本,这是Java的动态类型超集。
答案 3 :(得分:-2)
詹金斯可能是你可以看到的东西