有没有一种方法可以在Java程序内部调用checkstyle?

6

我有一个Java程序,它创建了一个要在checkstyle上运行的文件路径列表。我想知道是否有一种方法可以直接从我的程序中运行checkstyle,或者我是否需要使用CLI。


这里有一个链接可能会对你有所帮助:https://www.baeldung.com/checkstyle-java - Mustahsan
1
@Mustahsan,这似乎是关于在IDE内设置或作为Maven构建的一部分 - 我有兴趣直接从Java程序中运行它。 - Andrew
你也可以从Java运行终端命令。 - Mustahsan
1
如果您想了解如何使用checkstyle简单地运行进程,请参考 https://dev59.com/iHRA5IYBdhLWcg3w4iF_ 的示例。如果您想知道是否有API可以编程方式运行checkstyle,那么这将不是本主题的范围。 - GhostCat
3个回答

6

是的,这是可能的,虽然它不是一个正式文档化的API,而是一组有效且相对稳定的调用。实际上,IDE插件就是这样实现的。

例如,IntelliJ的Checkstyle插件有一些代码可以供您参考:
https://github.com/jshiell/checkstyle-idea/tree/5.26.0/src/csaccess/java/org/infernus/idea/checkstyle/service/cmd

但是,如果您不需要通过 AuditListeners 在进程中直接获得反馈,则更容易调用Checkstyle作为命令行程序(例如通过 zt-exec)并解析其XML报告。


1
我有一个Java程序,想要直接从程序内部运行checkstyle。您可以从另一个Java程序中调用任何Java程序。当从命令行调用Java程序时,它的main方法被调用,并传入所有不属于java程序本身的命令行参数。在您的Java程序中,您只需要调用与命令行相同的main方法即可。对于checkstyle来说,这是com.puppycrawl.tools.checkstyle.Main。请参见https://github.com/checkstyle/checkstyle/blob/bd7621fae3b1b887d46b8a678600db7e6d03185c/src/main/java/com/puppycrawl/tools/checkstyle/Main.java#L100
然而,checkstyle的缺点在于当它完成时会调用System.exit,因此您将永远无法从调用中返回。为了防止System.exit完全终止JVM,请参见Java:如何测试调用System.exit()的方法?以获取SecurityManager示例。

您可以避免所有这些System.exit业务,但这需要您复制一堆Checkstyle的代码,这些代码也在Main类中。请参见https://github.com/checkstyle/checkstyle/blob/bd7621fae3b1b887d46b8a678600db7e6d03185c/src/main/java/com/puppycrawl/tools/checkstyle/Main.java#L332。由您决定如何处理它。


-1

虽然这个链接可能回答了问题,但最好在这里包含答案的关键部分,并提供链接作为参考。仅有链接的答案如果链接页面发生变化,就可能失效。- 来自审查 - Abra
@Abra 根据你的要求,我添加了详细信息。其他答案也大量依赖链接,并且我明确指出了推荐使用的类作为API。我知道你对此仍然不满意,但我愿意承担这个责任,因为我认为这对于处在我这个位置上的其他程序员可能会有用。 - Ellen Spertus
@Abra根据您的要求,我添加了细节。其他答案也大量依赖链接,我也指出了推荐的API类。我知道您不喜欢,因为您给了我负面评价,但我会承担这个责任,因为我认为这对于其他和我处境相似的程序员可能会有用。 - undefined
关于你的信息,我没有给你的回答点踩。你的回答出现在低质量回答队列中,由于它基本上只包含链接,所以我建议将其删除。我认为你应该发布一些演示如何使用API的代码。 - Abra
@Abra,对于我错误地说你给它点了踩,我向你道歉。我认为这个答案有价值,所以我会保留它。我不认为为一个几年前的帖子编写代码是我的时间的好利用。被采纳的答案也没有提供代码。感谢你花时间审查内容,即使在这种情况下我与你意见不同。 - Ellen Spertus
@Abra,对于我错误地说你给它点了踩,我向你道歉。我认为这个答案有价值,所以我会保留它。我不认为为一个几年前的帖子编写代码是我的时间的好利用。被采纳的答案也没有代码。感谢你花时间审查内容,即使在这种情况下我不同意你的观点。 - undefined

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