繁体   English   中英

如何以编程方式在文件*内容上运行Checkstyle,Findbugs或PMD *

[英]How to run Checkstyle, Findbugs, or PMD programmatically on file *content*

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

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

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

我基本上需要能做类似这样的事情:

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工具套件集成的商业解决方案。

大约一年前我尝试过类似的东西,找不到任何避免临时文件的好方法。 所以我最终通过Stash CommandBuilderFactory()使用“git cat-file --batch”来生成临时文件,然后将它们提供给Checkstyle。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM