有没有一个简单的CLI Java代码检查工具?

98
我一直在尝试寻找一个可以在CLI上运行的Java代码检查工具,它必须是独立于Eclipse的,并且可以通过git提交钩子或我们的自动化构建脚本来调用。这样的工具是否存在?
理想情况下,它需要检查未使用的导入和变量,确保遵循样式指南,正确使用异常等等。虽然如果它能包含上述功能的某个子集,那也比我们现在什么都没有好。

2
// 这不是一个软件推荐的请求吗? - Nathan Basanese
8
我不确定是否应该在这里或元社区问,但是像这样询问建议的问题有什么问题呢?当然,在这个问题中没有单一、客观的答案,但同样也适用于许多技术问题。这个问题可以重新表述为“我没有代码检查工具,也不知道有哪些工具可用、当前使用情况和广泛使用”。那会有帮助吗?我宁愿在StackOverflow上找到一个精选、排名和日期记录的问答,而不是其他地方。如果不在这里,那么有这种问题的人应该去哪里呢? - Kyle Krull
3个回答

95
  • SpotBugs(之前的Findbugs)用于查找现有的漏洞。非常优秀!
  • PMD 用于查找可能导致错误的模式(例如未使用的变量)
  • Checkstyle 用于执行编码规范和约定(例如空格,Javadoc)
  • Error Prone 直接钩入应用程序的编译步骤
  • clang-format 支持Java,并且可以在您的系统上使用

所有这些工具都有一些重叠的规则。还有许多类似的工具,但这些是最受欢迎和支持的工具。


1
你认为Findbugs和PMD做的事情不同吗?上次我研究了一下,得出结论它们足够相似,我们只需要一个(并选择了PMD)。我们还运行了Checkstyle,并且发现即使是PMD和Checkstyle也有重叠。 - Tom Anderson
@TomAnderson - 我会说它们肯定有不同的作用。两者都有价值(显然也有重叠)。 - jtahlborn
是的,目标非常不同。 Findbugs试图通过深入分析找到实际的错误。 PMD只是寻找已知可能导致bug的模式。就我个人而言,我使用FindBugs和Checkstyle,因为它们之间有较少的重叠。 - mikeslattery
你可能想提到pmd有两种不同类型的检查,即pmd和cpd。 - jtahlborn
感谢mikeslattery的指引,这对我很有帮助! - BlueDragonX
4
Findbugs现在更名为SpotBugs(位于GitHub上)。 - Matruskan

12

另外,还要检查Sonar,它结合了许多其他工具,并为其提供了一个良好的视图。

来自Checkstyle,FindBugs,PMD,Clirr,fb-contrib的规则。


不确定如何将其添加到提交后钩子中,但http://docs.codehaus.org/display/SONAR/Analyzing+with+Maven可能是一个很好的起点(尤其是如果您正在使用maven)。

甚至考虑使用http://docs.codehaus.org/display/SONAR/Continuous+Integration中列出的方法之一,因为您可能正在寻找更好的整个团队的工具(“尽管其中一些功能比我们现在拥有的任何内容都要好!”


2
四年后,SonarQube似乎更加活跃、现代化和完整。它曾经结合了上述工具,但现在通过本地实现来避免重叠。https://blog.sonarsource.com/already-158-checkstyle-and-pmd-rules-deprecated-by-sonarqube-java-rules/ - user2518618
1
仍然没有适用于Sonar的好用CLI工具... - Fabich

-3

这正是我正在开发的内容:一个友好的CLI工具,用于检查Java代码的质量。它还具有交互式模式。您可以运行单个查询(以检查单个警告)或同时运行所有查询。

该工具处于早期阶段,但我几乎每天都在开发它。它可以在这里获取:

https://github.com/ftomassetti/effectivejava

请告诉我您对此的看法,并随时提出问题。


4
这个项目上一次提交是两年前的事了。不确定它是否仍在积极开发中。 - Daniel Eagle
不,它不是。但后来我开始使用JavaParser。该项目没有提供CLI,但可以在其之上构建。 - Federico Tomassetti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接