Исключение классов в отчетах плагина Maven Checkstyle

У меня есть проект Maven 2, и я хочу настроить свой плагин отчетов Checkstyle, чтобы анализировать только некоторые из моих классов. Я нашел maven.checkstyle.excludes свойство, но, несмотря на передачу этого в качестве параметра командной строки (используя -D=maven.checkstyle.excludes=...Я не могу заставить его работать. Я не могу найти ничего на странице документации по плагину. В идеале я хочу иметь возможность установить это в <configuration> раздел моего ПОМ.

6 ответов

Решение

Если этот вопрос о Maven 2, то свойство excludesи принимает разделенный запятыми список шаблонов Ant. Так что либо передайте это в командной строке:

-Dexcludes=**/generated/**/*

Или настройте его в конфигурации плагина:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-checkstyle-plugin</artifactId>
   <configuration>
       <excludes>**/generated/**/*</excludes>
   </configuration>
</plugin>

Другой вариант - использовать фильтр подавления.

Например, вы можете использовать SuppressionCommentFilterподавить события аудита между комментариями, содержащими CHECKSTYLE:OFFи комментарий, содержащийCHECKSTYLE:ON (затем просто добавьте эти комментарии к классам или частям кода, которые вы не хотите проверять).

Если, как и я, вы пришли сюда в поисках способа исключить сгенерированные источники из контрольного стиля, сделайте следующее:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-checkstyle-plugin</artifactId>
  <version>2.15</version>
  <configuration>
    <sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
  </configuration>
</plugin>

По умолчанию checkstyle:checkstyle цель использования плагина checkstyle ${project.compileSourceRoots}, который, очевидно, включает в себя сгенерированные исходные каталоги.

Если вы измените его на ${project.build.sourceDirectory}, он будет использовать только исходный каталог, а не любые сгенерированные исходные каталоги.

Обратите внимание, что в то время как <sourceDirectory> устарела, альтернатива, <sourceDirectories> Похоже, не работает.

Кроме того, если вы хотите исключить несколько независимых папок, вы можете добавить несколько независимых путей, разделенных запятой, как это

<excludes>org/log4j/*,com/acme/**/*,com/companyb/*</excludes>

Приведенные выше ответы не сработали для меня, поскольку я запускаю генерацию кода в maven, которая также добавляет цель / сгенерированную в качестве исходного каталога.

Следующее решение работает: вы должны использовать явный файл конфигурации checkstyle-suppressions.xml и активировать его из своей конфигурации:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>3.1.1</version>
    <configuration>
      <configLocation>checkstyle.xml</configLocation>
      <suppressionsLocation>checkstyle-suppressions.xml</suppressionsLocation>
   [...]

Файл подавления для исключения целевой папки выглядит так:

<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
  "-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
  "https://checkstyle.org/dtds/suppressions_1_2.dtd">

<suppressions>
  <suppress files="[/\\]target[/\\]" checks=".*" />
</suppressions>

Я использую maven 3 и исключаю, похоже, не работает. Этот плагин позор. Они как будто не проверяют собственный стиль, отсюда и баги. Что сработало, так это трюк sourceDirectories:

                  <configuration>
                <sourceDirectories>
                    <sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
                </sourceDirectories>
            </configuration>

Я использую maven 3, и по какой-то причине оба исключения и sourceDirectory не работают. Добавление альтернативы для всех, кто сталкивается с той же проблемой.

Настройте пользовательское подавление контрольного стиля, как показано ниже.

      <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>${checkstyle.maven.plugin.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>com.puppycrawl.tools</groupId>
                        <artifactId>checkstyle</artifactId>
                        <version>${com.puppycrawl.tools.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>validate</id>
                        <phase>validate</phase>
                        <configuration>
                            <configLocation>
                                src/main/resources/customized_google_checks.xml
                            </configLocation>
                            <suppressionsLocation>
                                src/main/resources/customized_suppressions.xml
                            </suppressionsLocation>
                            <consoleOutput>true</consoleOutput>
                            <failsOnError>true</failsOnError>
                            <failOnViolation>false</failOnViolation>
                            <violationSeverity>warning</violationSeverity>
                            <includeTestSourceDirectory>false</includeTestSourceDirectory>
                        </configuration>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

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

      
<!DOCTYPE suppressions PUBLIC
        "-//Puppy Crawl//DTD Suppressions 1.1//EN"
        "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">

<!--<!DOCTYPE module PUBLIC-->
<!--        "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"-->
<!--        "https://checkstyle.org/dtds/configuration_1_3.dtd">-->

<suppressions>
    <suppress checks=".*" files=".ESAPI.properties" />

</suppressions>
Другие вопросы по тегам