有没有办法在Java程序中调用checkstyle?
问题的原因是用户想知道是否有一种方法可以在Java程序中调用checkstyle。解决方法是使用checkstyle的API,该API位于com.puppycrawl.tools.checkstyle.api包中。以下是整理后的文章:
调用Checkstyle从Java程序中直接调用的方法
有用户想知道是否有一种方法可以在Java程序中调用checkstyle。可以通过使用checkstyle的API来实现这一目的。API位于com.puppycrawl.tools.checkstyle.api包中。以下是解决方法的详细信息:
- 链接:Invoking Checkstyle directly from Java
- 推荐的类:com.puppycrawl.tools.checkstyle.api
请注意,这个解决方法的链接可能会发生变化,因此最好在这里提供答案的重要部分,并提供链接供参考。只提供链接的答案如果链接页面发生变化就会失效。
以上是一个用户为了增加详细信息而添加的评论。用户认为这个解决方法对于其他处于同样位置的程序员可能会有用。这个评论也解释了为什么之前的回答只提供了链接。
然后,另一个用户指出之前的回答只提供了链接,建议提供一个演示如何使用API的代码。之后,第一个用户道歉并解释了自己为什么认为这个回答有价值,并表示不认为写一年前问题的代码是一个好主意。
总之,通过使用checkstyle的API可以在Java程序中调用checkstyle。API位于com.puppycrawl.tools.checkstyle.api包中。
有一个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: How to test methods that call System.exit()?中的SecurityManager示例。
你可以避免所有这些System.exit
的麻烦,但这将需要你复制一堆Checkstyle的代码,这些代码也在Main
类中。参见https://github.com/checkstyle/checkstyle/blob/bd7621fae3b1b887d46b8a678600db7e6d03185c/src/main/java/com/puppycrawl/tools/checkstyle/Main.java#L332。如何处理这个问题取决于你自己。
是的,可以通过一些调用来实现这一功能,虽然它不是一个文档化的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报告。