【问题标题】:What's the fastest way to get all build errors in a Java project?在 Java 项目中获取所有构建错误的最快方法是什么?
【发布时间】:2013-09-30 04:17:12
【问题描述】:

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

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

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

【问题讨论】:

  • 哇。这真的来自“如果它编译,就发布它”学校。如果单元测试也失败了,那么阻止提交怎么办?
  • @Bathsheba 你得先学会走路再跑;)
  • 确实如此。投赞成票。
  • 你知道在你(clean &)构建项目之后你可以在eclipse的问题选项卡中查看错误,对吧?

标签: java eclipse git ant


【解决方案1】:

让我们从一些基础开始:

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

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

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

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

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

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

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

【讨论】:

  • 我们目前使用 Jenkins 服务器来负责运行测试和构建作业。我会看看它还能为我们做什么。
  • 查看 Jenkins 的 Warnings Plugin。这将在您进行构建时计算所有警告和错误。它还将计算 JavaDoc 警告。另外,如果您有其他类型的构建过程,您也可以使用正则表达式来过滤掉这些警告。我们将其用于自动配置测试。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      Jenkins 可能是你可以看看的东西

      【讨论】:

      • 欢迎来到 Stackoverflow。我建议你看看这个checklist,看看你是否可以为你提供的答案提供更多的见解/细节。
      猜你喜欢
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 2013-06-02
      • 2012-04-25
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多