Есть ли способ вызвать checkstyle из Java-программы? - PullRequest
2 голосов
/ 01 мая 2019

У меня есть программа на Java, которая создает список путей к файлам, для которых я хочу запустить checkstyle.Мне было любопытно, есть ли способ напрямую запустить контрольный стиль из моей программы или мне нужно будет выложить в CLI.

Ответы [ 2 ]

3 голосов
/ 02 мая 2019

Да, это возможно, хотя это не столько документированный 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 .

0 голосов
/ 02 мая 2019

У меня есть программа на 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.

Недостатком checkstyle, однако, является то, что он вызывает System.exit, когда это сделано, поэтому вы никогда не вернетесь со своего вызова.Чтобы не допустить полного завершения JVM в System.exit, см. 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.Вам решать, как вы хотите справиться с этим.

...