Разница с Checkstyle и PMD в родительском модуле maven - PullRequest
0 голосов
/ 02 мая 2018

У меня есть Java-приложение с Maven, имеющее структуру ниже:

parent
| - pom.xml
| - child
    | - pom.xml
| - analyzers
    | - pmdrules.xml
    | - checkstyle.xml

Я настроил PMD и checkstyle в родительском pom.xml. Для PMD наборы правил настраиваются, как показано ниже, и отлично работает как для родительских, так и для дочерних модулей:

<configuration>
    <rulesets>
        <ruleset>${basedir}/../analyzers/pmdrules.xml</ruleset>
    </rulesets>
</configuration>

Однако, для checkstyle, если я настраиваю configLocation таким же образом, он завершается ошибкой либо в родительском, либо в дочернем. Я должен использовать пользовательское свойство, чтобы преодолеть это.

<configuration>
    <!-- Below config with ${projectRootDir}, a custom property always pointing to parent root works fine -->
    <configLocation>${projectRootDir}/analyzers/checkstyle.xml</configLocation>
    <!-- Below configurations with ${basedir} will fail build for child -->
    <!--<configLocation>${basedir}/analyzers/checkstyle.xml</configLocation>-->
    <!-- Below configurations with ${basedir} will fail build for parent -->
    <!--<configLocation>${basedir}/../analyzers/checkstyle.xml</configLocation>-->
</configuration>

Вот образец репродуктора - https://github.com/ramtech123/pocs/blob/master/myapp-parent-module/pom.xml

Я попытался запустить сборку maven в режиме отладки. Из журналов мне кажется, что фактическое выполнение PMD происходит только для дочернего модуля, следовательно, оно проходит без проблем.

Может ли кто-нибудь помочь мне понять основную причину и улучшить мою конфигурацию.

Заранее спасибо.

1 Ответ

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

Когда вы создаете дочерний pom.xml, он наследует свою родительскую конфигурацию, но такие свойства, как baseDir, переопределяются дочерними, поэтому он использует свой собственный путь при шаблонировании конфигурации вашего плагина.

В качестве опции вы можете просто оставить <configLocation>analyzers/checkstyle.xml</configLocation> без {baseDir} или {projectRootDir}, все работает отлично.

Однако ваше решение также хорошо, так как вы указываете projectRootDir в родительском корне, и оно оценивается там, и дочерний pom не переопределяет ваше пользовательское свойство, поэтому оно корректно.

Ваш pmd всегда работает, потому что плагин pmd работает только для дочернего модуля.

...