Можно ли исключить исходный файл для определенного правила PMD?

при определении набора правил PMD можно ли исключить исходный файл из определенного правила?

Я хочу сделать что-то вроде следующего:

<rule ref=rulesets/java/logging-java.xml>
  <exclude name="Ignore.java" />
</rule>

Exclude поддерживается только для имен правил. Есть ли что-нибудь подобное для исходных файлов?

3 ответов


Не без написания пользовательского правила, которое добавляет логику для исключения по имени файла.

Я думаю, что в вашем сценарии лучший подход - запустить PMD за два прохода-один с большим набором правил против всего кода. И один с меньшим набором правил против кода, который вы хотите дополнительно проверить.

У этого есть обратная сторона создания двух отчетов. Но это более легкая проблема для решения, чем та, которую вы поставили (или чем создание пользовательского правила.) PMD может создание выходных данных XML. Вы можете объединить их программно, а затем вызвать код PMD для создания отчета HTML в конце. Или вы можете просто получить два отчета и сделать это прямо сейчас.


Если вы используете maven-pmd-plugin инструмент для запуска PMD, затем вы можете включить файл свойств, перечисляющий классы и правила для игнорирования.

исключить-pmd.свойства

org.apache.maven.ClassA=UnusedPrivateField,EmptyCatchBlock
org.apache.maven.ClassB=UnusedPrivateField,UnusedFormalParameter,UnusedPrivateMethod

пом.в XML

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.8</version>
        <executions>
          <execution>
            <goals>
              <goal>check</goal>
            </goals>
            <configuration>
              <excludeFromFailureFile>exclude-pmd.properties</excludeFromFailureFile>
            </configuration>
          </execution>
          <execution>
            <goals>
              <goal>cpd-check</goal>
            </goals>
            <configuration>
              <excludeFromFailureFile>exclude-cpd.properties</excludeFromFailureFile>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>

Подробнее: https://maven.apache.org/plugins/maven-pmd-plugin/examples/violation-exclusions.html


кажется, что PMD поддерживает только исключение файлов в RuleSet level.

у нас есть то же требование, которое исключает файлы в Rule level..

наконец, мы пишем клиент wrapper lab и логика обхода файла контроллера самостоятельно, чтобы решить эту проблему.

но для нормальной задачи PMD.. Мы можем сделать одно и то же правило вместе как набор правил и исключить его на уровне набора правил.

UPDATE: мы обнаружили, что расширяет net.sourceforge.pmd.lang.rule.XPathRule, и добавить исключить файл просто. Для Java Code Rule, мы можем использовать таким же образом исключить файл в определении правила.