我们正在从头开始做一个网络项目,正在寻找以下的静态程序分析工具。
这个项目是建立在 Maven 的基础上的。我没有为此使用多个工具,而是在寻找一个灵活的解决方案时遇到了 SonarQube。
我们真的可以通过 SonarQube 实现 Checkstyle、 pMD 和 Findbug 的结果吗?
Sonar 使用这3个工具作为插件,并通过显示图表等方式聚合来自这三个工具的数据,从而提供附加值。所以它们是声纳的补充。
声纳不仅仅是这些工具。 最大的好处是 gui,它可以让您轻松地配置任何东西。 它提供的统计数据非常详细(代码行等)。 它甚至为测试覆盖率等提供了很好的支持:)
这里你可以好好看看: Http://nemo.sonarsource.org/
Sonar 将运行 CheckStyle、 FindBugs 和 PMD,以及一些其他的“插件”,比如 Java 项目默认的 Cobertura (代码覆盖率)。但是,主要的附加值是它将历史记录存储在数据库中。然后您可以看到 趋势。你是 好转了代码的基础还是你正在做相反的?只有有记忆力的工具才能告诉你。
您应该在 CI 系统中运行 Sonar,这样即使需要一些时间来执行的事情(例如 CPD 复制粘贴检测器)也可以运行。你会有你的过去。例如,使用 Eclipse 插件,你会更快地检测到违规行为—— 这很好——但是如果它开始运行时间过长,或者运行较少的“高质量插件”(比如跳过 CPD 或者跳过代码覆盖率分析) ,你就不会经常运行它。你也不会有过去。
此外,声纳生成 视觉效果报告,“仪表板”风格。所以很容易理解。有了 Jenkins 中的 Sonar,您将能够向开发人员和您的管理层展示在过去几周和几个月中执行的工作对代码库质量的影响。
除了声纳,我还会使用这些工具,因为当有人违反规则时,它们可能会使专家构建失败。而声纳则更具回溯性。
声纳是伟大的,但如果你想单独使用上述工具,仍然有很好的图形,你可以使用 分析收集器插件作为您的詹金斯 CI 构建的一部分。这样做的一个小优点是,您可以将 PMD/Findbug/Checkstyle 配置签入到 SCM 中,并将其集成到 Maven 构建中,而不必依赖于单独的 Sonar 服务器。
是也不是,除了其他答案。
SonarQube 目前正在摒弃 pMD、 Checkstyle 和 Findbug,并使用它们自己的技术来分析 Java 代码(称为 SonarJava)。他们这样做是因为他们不想花时间去修复、升级(或者等待)那些库(例如 Java8) ,因为它们使用了过时的库。
他们还为您的个人 IDE 提供了一组名为 SonarLint的新插件。
... 几年后: 不,它不是!SonarQube 应该能够用自己的分析器覆盖所有规则,但是仍然有来自 PMD 或 CheckStyle 的规则没有被 SonarQube 覆盖。参见示例: PMD Return nFromFinallyBlock。
至少自从 SonarQube 6.3 + 以来,Findbug 似乎(现在)不再作为一个插件被支持了。Sonarsource 正在用自己的 Java 插件替换 Findbug-rules。
他们甚至在这里列出了每个规则的替换状态,但现在已经被删除了。
有关详细信息,请参阅 https://community.sonarsource.com/t/where-is-dist-sonarsource-com-content/5353。