什么';获取Java项目中所有生成错误的最快方法是什么?

什么';获取Java项目中所有生成错误的最快方法是什么?,java,eclipse,git,ant,Java,Eclipse,Git,Ant,目前,我正在考虑将一些构建过程集成到我的源代码管理中(特别是Git钩子)。我正在尝试编写一个预提交钩子,用于检查Java项目(一个中大型测试开发项目)中的构建错误,但不允许在构建中包含错误的提交。事实证明,这相当具有挑战性 该方法使用命令行Eclipse工具来构建和输出警告和错误。这在技术上是可行的,但速度很慢,可能会导致EclipseIDE出现问题(我已经有过堆分配错误)。我还研究了使用的解决方案,但这些方法似乎不是简单的单线解决方案,而且可能仍然很慢 我的主要问题是:通过命令行构建和验证Ja

目前,我正在考虑将一些构建过程集成到我的源代码管理中(特别是Git钩子)。我正在尝试编写一个预提交钩子,用于检查Java项目(一个中大型测试开发项目)中的构建错误,但不允许在构建中包含错误的提交。事实证明,这相当具有挑战性

该方法使用命令行Eclipse工具来构建和输出警告和错误。这在技术上是可行的,但速度很慢,可能会导致EclipseIDE出现问题(我已经有过堆分配错误)。我还研究了使用的解决方案,但这些方法似乎不是简单的单线解决方案,而且可能仍然很慢


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

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

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

Jenkins可能是一个您可以看到的东西

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

  • 预提交钩子在服务器而不是客户端上运行。默认情况下没有工作目录。您必须确保
    javac
    可用,并且是正确的版本
  • 预提交挂钩将冻结用户的终端,直到完成
现在,签出Java项目的新副本、运行Ant、等待它编译,然后处理编译的输出需要多长时间?一两分钟?20秒?10秒?当您等待Git推送完成时,即使是10秒也会感觉像是永远的。而且,如果其他用户想要提交代码,他们也必须等待

一种更好、更简单的方法是使用连续构建服务器,如。詹金斯很容易安装。(它自带内置的应用服务器)并有数百个插件,可用于帮助报告项目的运行状况。如果编译无法进行,詹金斯会给罪犯和你提到的任何人发电子邮件

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

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

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


那么,看看詹金斯。它很容易安装,并会做你想要的和更多

哇。这真的是来自“如果它编译了,就发货”学校。如果单元测试也失败了,那么阻止提交怎么样?@Bathsheba你必须在运行之前学会走路;)的确如此。投票表决。你知道你可以在(clean&)构建项目后在eclipse的problems选项卡中查看错误,对吗?欢迎来到Stackoverflow。我建议您看看这一点,看看您是否可以提供更多的见解/详细信息来了解您提供的答案。我们目前提供Jenkins服务器来负责运行测试和构建作业。我看看它还能为我们做些什么。看看詹金斯的照片。这将计算生成时的所有警告和错误。它还将计算JavaDoc警告。另外,如果您有另一种类型的生成过程,您也可以使用正则表达式过滤掉这些警告。我们使用它进行自动配置测试。