java - 如何以编程方式在文件 *content* 上运行 Checkstyle、Findbugs 或 PMD

标签 java checkstyle findbugs pmd atlassian-plugin-sdk

我正在编写一个实用程序来检查 Atlassian Stash修改文件的拉取请求 - 目标是通过 Checkstyle(或 Findbugs 或 PMD)运行每个 Java 文件,然后让插件对每一行有问题的行进行评论。

为此,插件必须通过 Checkstyle(或其他代码风格实现实用程序)运行请求中每个修改 Java 文件的内容。 Atlassian Stash API 使得获取修改文件的内容变得非常容易,但似乎不可能以编程方式通过 Checkstyle 运行这些内容——唯一的方法是在磁盘上保存一个临时文件并运行 Checkstyle通过调用 Runtime.getRuntime().exec(...) 命令来对抗它。

是否有任何可以使用 Java API 以编程方式运行的类似 Checkstyle 的简化实用程序?

我基本上需要可以做这样的事情的东西:

String contentsOfJavaFile = ; //stuff
List<Problem> problems = CheckstyleOrSomethingElse.analyze(contentsOfJavaFile);

for(Problem p : problems) {
    // p.getLine();
    // p.getDescription();
    // add comment to Stash
}

最佳答案

这可能只是对您问题的部分回答,但它仍然可以为其他人节省一些时间:

我已经为 Checkstyle 研究了这个问题。 Checkstyle(从 5.7 源开始)不提供分析文件以外任何东西的方法。唯一相关的Checker方法是 int process(List<File> aFiles) .我还查看了 Eclipse-CS 和 Checkstyle-IDEA 插件,看看它们是如何处理这个问题的。两者都通过(临时)文件。

因此,如果您的工具是 Checkstyle,则必须创建一个临时文件。

让我补充一点(即使您没有明确要求),我相信您只有在包含 Checkstyle 的情况下才能认真追求“免费的、单独的工具”方法。仅使用 FindBugs 和 PMD 而不使用 Checkstyle 可能是不够的(并且它们可能还需要临时文件)。因此,您可以创建临时文件,也可以使用完全不同的解决方案,例如免费的 SonarQube 或与您的 Atlassian 工具套件集成的商业解决方案。

关于java - 如何以编程方式在文件 *content* 上运行 Checkstyle、Findbugs 或 PMD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24501153/

相关文章:

java - 从不同对象的列表中连接 3 个流时获取 List<String>

java - Sqlite 数据库助手。制定一个返回方法

java - 我如何压缩这些返回语句或一起避免 checkstyle 错误?

java - 如何教 findbugs 正确理解 IoC 字段?

java - 子类和父类(super class)中的同名变量

java - 使用 Apache POI 将宏复制到模板文件中?

java - 在 Java 中按值对自定义对象数组进行排序

android - 我在哪里可以找到 Android 编码风格的 checkstyle 配置?

java - eclipse checkstyle 错误无法初始化模块 TreeWalker - TreeWalker 不允许作为 FileLength 的父级

java - 如何修复直接写入 HTTP header 输出的 Findbugs HTTP 参数