PMD не смог найти набор правил

Я создаю Java-проект на основе maven, который содержит плагин PMD maven. Я использую свой собственный набор правил XML, и он работает как шарм, за исключением двух наборов правил: пустой код и ненужный: когда я запускаю сборку, maven говорит: "< em>не удается найти ресурс". Определения ролей выглядят так:

<role ref="rulesets/emptycode" />

и

<role ref="rulesets/unnecessary" />

Во всех остальных случаях такое определение работает. Я обнаружил следующее: в категории ecmasrcipt есть набор правил с названием «необязательный», поэтому, возможно, это определение требует некоторого предложения по использованию версии Java. Я попробовал несколько вариантов, например установить атрибут language для узла ruleset xml ("JAVA", на основе PMD JavaDoc) и немного пре-постфикса в ref< /em>, но это не работает, и я не нашел рабочего решения в Интернете. У кого-нибудь есть идея, что я забыл установить или что я терплю неудачу? Спасибо за любую помощь!


person vvinston    schedule 14.11.2012    source источник


Ответы (1)


PMD кажется неудобным зверем для использования от Maven. Я только что понял это с версией 3.0 плагина - есть два решения:

  • Быстрое решение: поместите наборы правил в свой проект:

    • download the PMD jar (http://sourceforge.net/projects/pmd/files/latest/download)
    • извлечь lib/pmd-x.x.x.jar
    • извлеките из этого jar-файла PMD rulesets/<type>/<ruleset>.xml файлов, которые вы хотите использовать
    • поместите их в папку под вашим проектом - что-то вроде ${basedir}/pmd/...
    • ссылаться на них следующим образом:

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pmd-plugin</artifactId>
          <configuration>
              <rulesets>
                  <ruleset>${basedir}/pmd/<ruleset>.xml</ruleset>
              </rulesets>
          </configuration>
      </plugin>
      

      Преимущество в том, что это просто, а недостаток в том, что если вы обновите версию PMD в будущем, вам нужно будет не забыть обновить эти файлы.

  • Хорошее решение: ссылки на наборы правил в pmd-x.x.x.jar.

    • create a custom ruleset such as: ${basedir}/pmd/custom.xml (see http://pmd.sourceforge.net/pmd-5.0.2/howtomakearuleset.html)
    • ссылаться на наборы правил PMD следующим образом: <rule ref="rulesets/java/imports.xml"/>
    • Примечание: путь — это путь внутри pmd-x.x.x.jar (см. выше) без косой черты в начале.
    • ссылайтесь на свой собственный набор правил следующим образом:

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pmd-plugin</artifactId>
          <configuration>
              <rulesets>
                  <ruleset>${basedir}/pmd/custom.xml</ruleset>
              </rulesets>
          </configuration>
      </plugin>
      

      Преимущество в том, что это всегда будет ссылаться на текущие наборы правил PMD из jar PMD, недостаток в том, что это немного неудобно для правильного понимания.

Чтобы поэкспериментировать с этим, пока он не заработал (maven-pmd-plugin версия 3.0), я продолжал запускать mvn pmd:pmd (<linkXref>false</linkXref> в pom.xml) и настраивал пути, пока не перестал получать ошибки.

person David Carboni    schedule 04.03.2013
comment
Возможно, они изменили способ развертывания вещей? Я не вижу pmd-x-x-x.jar с 5.7.0. - person Mary Ellen Bench; 07.06.2017