Ответ 1
Запретить предупреждения PMD или игнорировать определенную строку по hardcoded
Есть ли способ сообщить PMD игнорировать проверку частей кода для дублирования?
Например, могу ли я сделать что-то вроде этого:
// CPD-Ignore-On
...
// CPD-Ignore-Off
В настоящее время у меня PMD настроен так, как это, используя Maven, но не вижу никаких аргументов, которые хотели бы, чтобы я делал то, что я хочу, если мне не хватает чего-то.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.5</version>
<configuration>
<minimumTokens>40</minimumTokens>
<targetJdk>1.5</targetJdk>
<ignoreIdentifiers>true</ignoreIdentifiers>
<ignoreLiterals>true</ignoreLiterals>
</configuration>
</plugin>
Запретить предупреждения PMD или игнорировать определенную строку по hardcoded
После копания достаточно, я, наконец, наткнулся на него.
Добавив аннотации @SuppressWarnings("CPD-START")
и @SuppressWarnings("CPD-END")
, весь код внутри будет игнорироваться CPD - таким образом, вы можете избежать ложных срабатываний.
Источник - http://pmd.sourceforge.net/pmd-5.0.5/cpd-usage.html.
Я нашел возможным отключить проверку всего класса в конфигурации maven-pmd-plugin в проекте pom. Выполняется добавлением тега <excludes>
. Если вы хотите сделать это, ваш conf должен выглядеть следующим образом:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.5</version>
<configuration>
<minimumTokens>40</minimumTokens>
<targetJdk>1.5</targetJdk>
<ignoreIdentifiers>true</ignoreIdentifiers>
<ignoreLiterals>true</ignoreLiterals>
<excludes>
<exclude>**/YourClassName.java</exclude>
........
<exclude>....</exclude>
</excludes>
</configuration>
</plugin>
Я знаю, что это вопрос 8 лет, но, для полноты, CPD поддерживает это с PMD 5.6.0 (апрель 2017 г.).
Полные (текущие) документы для подавления на основе комментариев доступны по адресу https://pmd.github.io/pmd-6.13.0/pmd_userdocs_cpd.html#suppression.
Стоит отметить, что если в файле есть комментарий //CPD-OFF
, но нет соответствующего //CPD-ON
, все будет игнорироваться до конца файла.