У меня есть программа на Java, которая создает список путей к файлам, для которых я хочу запустить checkstyle.Мне было любопытно, есть ли способ напрямую запустить контрольный стиль из моей программы или мне нужно будет выложить в CLI.
Да, это возможно, хотя это не столько документированный API, сколько набор вызовов, который работает и который остается достаточно стабильным. На самом деле плагины IDE идут именно так.
Например, плагин Checkstyle для IntelliJ имеет некоторый код, который вы можете посмотреть, чтобы получить представление: https://github.com/jshiell/checkstyle-idea/tree/5.26.0/src/csaccess/java/org/infernus/idea/checkstyle/service/cmd
Однако может быть проще просто вызвать Checkstyle как программу командной строки (например, через zt-exec ) и проанализировать ее отчет XML. То есть, если вам не нужна прямая обратная связь через AuditListeners .
У меня есть программа на Javaэто способ прямого запуска контрольного стиля из моей программы
Вы можете вызвать любую программу 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.
main
java
com.puppycrawl.tools.checkstyle.Main
Недостатком checkstyle, однако, является то, что он вызывает System.exit, когда это сделано, поэтому вы никогда не вернетесь со своего вызова.Чтобы не допустить полного завершения JVM в System.exit, см. Java: как проверить методы, вызывающие System.exit ()? для примера SecurityManager.
System.exit
Вы можете избежать всего этого System.exit бизнес, но для этого потребуется, чтобы вы продублировали кучу кода Checkstyle, который также входит в класс Main.См. https://github.com/checkstyle/checkstyle/blob/bd7621fae3b1b887d46b8a678600db7e6d03185c/src/main/java/com/puppycrawl/tools/checkstyle/Main.java#L332.Вам решать, как вы хотите справиться с этим.
Main