Статьи

Учебник по плагину FindBugs Maven

FindBugs — это инструмент статического анализа кода, который выявляет проблемы, обнаруженные в коде Java.

Мы можем интегрировать FindBugs в наш процесс сборки с помощью плагина FindBugs Maven . В этом блоге описаны четыре типичных варианта использования и описано, как мы можем настроить плагин FindBugs Maven для поддержки каждого варианта использования.

Описанные варианты использования:

  1. Создать отчет FindBugs как часть отчетов проекта.
  2. Сбой сборки, если FindBugs находит проблемы из исходного кода.
  3. Создайте отчет XML без сбоя сборки.
  4. Создавайте как XML, так и HTML отчеты без создания сайта.

Давайте начнем.

Вариант использования 1: создание отчета Findbugs как части отчетов проекта

Иногда мы не хотим запускать статический анализ кода каждый раз, когда наш проект компилируется. Вместо этого мы хотим запустить его вручную, когда нам это нужно. Если это так, наш лучший вариант — создать отчет FindBugs при создании сайта проекта.

Мы можем сделать это, выполнив следующие действия:

  1. Добавьте объявление плагина FindBugs Maven в раздел отчетов файла pom.xml .
  2. Настройте плагин FindBugs Maven, выполнив следующие действия:
    1. Убедитесь, что наиболее точный анализ выполняется.
    2. Убедитесь, что все ошибки сообщаются.
    3. Убедитесь, что отчет XML сгенерирован.

Соответствующая часть файла pom.xml выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>findbugs-maven-plugin</artifactId>
            <version>2.5.2</version>
            <configuration>
                <!--
                   Enables analysis which takes more memory but finds more bugs.
                   If you run out of memory, changes the value of the effort element
                   to 'low'.
               -->
                <effort>Max</effort>
                <!-- Reports all bugs (other values are medium and max) -->
                <threshold>Low</threshold>
                <!-- Produces XML report -->
                <xmlOutput>true</xmlOutput>
            </configuration>
        </plugin>
    </plugins>
</reporting>

Отчет создается только при компиляции проекта .

Другими словами, когда мы хотим создать отчет FindBugs, мы должны выполнить следующую команду в командной строке:

1
mvn clean compile site

Давайте продолжим и выясним, как мы можем потерпеть неудачу при сборке, если FindBugs обнаружит проблемы из нашего исходного кода.

Вариант использования 2. Сбой сборки, если обнаружены проблемы

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

Другими словами, мы должны настроить плагин FindBugs Maven, чтобы он не выполнялся при обнаружении проблем. Мы можем сделать это, выполнив следующие действия:

  1. Добавьте объявление плагина в раздел плагинов файла pom.xml .
  2. Настройте плагин FindBugs Maven, выполнив следующие действия:
    1. Убедитесь, что наиболее точный анализ выполняется.
    2. Убедитесь, что все ошибки сообщаются.
    3. Убедитесь, что отчет XML сгенерирован.
    4. Сконфигурируйте плагин для создания отчета XML в каталоге $ {project.build.directory} / findbugs .
  3. Добавьте выполнение, которое запускает цель проверки плагина на этапе жизненного цикла компиляции Maven.

Соответствующая часть файла pom.xml выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>findbugs-maven-plugin</artifactId>
            <version>2.5.2</version>
            <configuration>
                <!--
                   Enables analysis which takes more memory but finds more bugs.
                   If you run out of memory, changes the value of the effort element
                   to 'Low'.
               -->
                <effort>Max</effort>
                <!-- Reports all bugs (other values are medium and max) -->
                <threshold>Low</threshold>
                <!-- Produces XML report -->
                <xmlOutput>true</xmlOutput>
                <!-- Configures the directory in which the XML report is created -->
                <findbugsXmlOutputDirectory>${project.build.directory}/findbugs</findbugsXmlOutputDirectory>
            </configuration>
            <executions>
                <!--
                   Ensures that FindBugs inspects source code when project is compiled.
               -->
                <execution>
                    <id>analyze-compile</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>check</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Эта конфигурация гарантирует, что цель проверки плагина Maven FindBugs вызывается на этапе жизненного цикла компиляции Maven. Если FindBugs находит проблемы из исходного кода, сборка завершается неудачно.

Давайте продолжим и выясним, как мы можем создать XML-отчет без создания сайта или сбоя сборки.

Вариант использования 3: создание отчета XML без сбоя сборки

Если мы хотим интегрировать Jenkins с FindBugs , нам нужно найти способ создания отчетов XML без сбоя сборки.

Мы можем настроить плагин FindBugs Maven для этого, выполнив следующие действия:

  1. Настройте плагин FindBugs Maven, как описано в предыдущем разделе (вариант использования 2).
  2. Убедитесь, что сборка не завершится ошибкой, если обнаружены проблемы, установив для свойства конфигурации failOnError значение false .

Соответствующая часть файла pom.xml выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>findbugs-maven-plugin</artifactId>
            <version>2.5.2</version>
            <configuration>
                <!--
                   Enables analysis which takes more memory but finds more bugs.
                   If you run out of memory, changes the value of the effort element
                   to 'Low'.
               -->
                <effort>Max</effort>
                <!-- Build doesn't fail if problems are found -->
                <failOnError>false</failOnError>
                <!-- Reports all bugs (other values are medium and max) -->
                <threshold>Low</threshold>
                <!-- Produces XML report -->
                <xmlOutput>true</xmlOutput>
                <!-- Configures the directory in which the XML report is created -->
                <findbugsXmlOutputDirectory>${project.build.directory}/findbugs</findbugsXmlOutputDirectory>
            </configuration>
            <executions>
                <!--
                   Ensures that FindBugs inspects source code when project is compiled.
               -->
                <execution>
                    <id>analyze-compile</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>check</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</Build>

Теперь мы можем создать отчет XML, скомпилировав проект.

В последнем случае описывается, как мы можем создавать как XML, так и HTML отчеты, не создавая сайт и не завершив сборку. Посмотрим, как это делается.

Вариант использования 4. Создание отчетов в формате XML и HTML без создания сайта

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

  1. Настройте плагин FindBugs Maven, как описано в предыдущем разделе (вариант использования 3).
  2. Добавьте объявление плагина XML Maven в раздел плагинов файла pom.xml .
  3. Настройте плагин, выполнив следующие действия:
    1. Создайте набор преобразований, который преобразует все файлы XML, найденные в каталоге $ {project.build.directory} / findbugs, и записывает результаты преобразования XSLT в тот же каталог.
    2. Сконфигурируйте таблицу стилей, которая указывает выходные данные преобразования XSLT. Библиотека FindBugs предоставляет пять таблиц стилей, которые можно использовать для этой цели. Доступные таблицы стилей описаны в примере конфигурации.
    3. Убедитесь, что все выходные файлы преобразования XSLT имеют расширение .html .
  4. Добавьте выполнение, которое вызывает цель преобразования плагина XML Maven на этапе жизненного цикла компиляции Maven.
  5. Добавьте FindBugs (версия 2.0.1) в качестве зависимости плагина.

Соответствующая часть файла pom.xml выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>findbugs-maven-plugin</artifactId>
            <version>2.5.2</version>
            <configuration>
                <!--
                   Enables analysis which takes more memory but finds more bugs.
                   If you run out of memory, changes the value of the effort element
                   to 'Low'.
               -->
                <effort>Max</effort>
                <!-- Build doesn't fail if problems are found -->
                <failOnError>false</failOnError>
                <!-- Reports all bugs (other values are medium and max) -->
                <threshold>Low</threshold>
                <!-- Produces XML report -->
                <xmlOutput>true</xmlOutput>
                <!-- Configures the directory in which the XML report is created -->
                <findbugsXmlOutputDirectory>${project.build.directory}/findbugs</findbugsXmlOutputDirectory>
            </configuration>
            <executions>
                <!--
                   Ensures that FindBugs inspects source code when project is compiled.
               -->
                <execution>
                    <id>analyze-compile</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>check</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>xml-maven-plugin</artifactId>
            <version>1.0</version>
            <configuration>
                <transformationSets>
                    <transformationSet>
                        <!-- Configures the source directory of XML files. -->
                        <dir>${project.build.directory}/findbugs</dir>
                        <!-- Configures the directory in which the FindBugs report is written.-->
                        <outputDir>${project.build.directory}/findbugs</outputDir>
                        <!-- Selects the used stylesheet. -->
                        <!-- <stylesheet>fancy-hist.xsl</stylesheet> -->
                        <stylesheet>default.xsl</stylesheet>
                        <!--<stylesheet>plain.xsl</stylesheet>-->
                        <!--<stylesheet>fancy.xsl</stylesheet>-->
                        <!--<stylesheet>summary.xsl</stylesheet>-->
                        <fileMappers>
                            <!-- Configures the file extension of the output files. -->
                            <fileMapper
                                   implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
                                <targetExtension>.html</targetExtension>
                            </fileMapper>
                        </fileMappers>
                    </transformationSet>
                </transformationSets>
            </configuration>
            <executions>
                <!-- Ensures that the XSLT transformation is run when the project is compiled. -->
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>transform</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>com.google.code.findbugs</groupId>
                    <artifactId>findbugs</artifactId>
                    <version>2.0.1</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

Это решение было первоначально описано в этом вопросе StackOverflow .

Теперь мы можем создавать как HTML, так и XML отчеты, компилируя наш проект.

Резюме

Теперь мы определили четыре типичных варианта использования плагина FindBugs Maven и узнали, как мы можем настроить плагин для поддержки каждого варианта использования.

Если вам известен пример использования, который не был описан в этом руководстве, сообщите мне об этом, оставив комментарий к этому сообщению в блоге.

  • Вы можете получить пример приложения к этому сообщению в блоге от Github .