Java >> Java Tutorial >  >> Tag >> maven

FindBugs Maven Plugin-Tutorial

FindBugs ist ein statisches Codeanalysetool, das Probleme identifiziert, die im Java-Code gefunden wurden.

Wir können FindBugs mithilfe des FindBugs-Maven-Plugins in unseren Build-Prozess integrieren. Dieser Blogbeitrag identifiziert vier typische Anwendungsfälle und beschreibt, wie wir das FindBugs-Maven-Plugin konfigurieren können, um jeden Anwendungsfall zu unterstützen.

Die beschriebenen Anwendungsfälle sind:

  1. FindBugs-Bericht als Teil der Projektberichte erstellen.
  2. Lassen Sie den Build fehlschlagen, wenn FindBugs Probleme im Quellcode findet.
  3. Erstellen Sie einen XML-Bericht, ohne dass der Build fehlschlägt.
  4. Erstellen Sie sowohl XML- als auch HTML-Berichte, ohne die Website zu erstellen.

Lass uns anfangen.

Anwendungsfall 1:Findbugs-Bericht als Teil der Projektberichte erstellen

Manchmal möchten wir nicht jedes Mal, wenn unser Projekt kompiliert wird, eine statische Codeanalyse ausführen. Stattdessen wollen wir es manuell ausführen, wenn wir es brauchen. Wenn dies der Fall ist, ist es am besten, den FindBugs-Bericht zu erstellen, wenn wir die Website des Projekts erstellen.

Wir können dies tun, indem wir diesen Schritten folgen:

  1. Fügen Sie die Deklaration des FindBugs-Maven-Plugins zum Reporting hinzu Abschnitt der pom.xml Datei.
  2. Konfigurieren Sie das FindBugs-Maven-Plug-in, indem Sie die folgenden Schritte ausführen:
    1. Stellen Sie sicher, dass die genaueste Analyse durchgeführt wird.
    2. Stellen Sie sicher, dass alle Fehler gemeldet werden.
    3. Stellen Sie sicher, dass der XML-Bericht generiert wird.

Der relevante Teil der pom.xml Datei sieht wie folgt aus:

<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>

Mit anderen Worten, wenn wir den FindBugs-Bericht erstellen möchten, müssen wir den folgenden Befehl an der Eingabeaufforderung ausführen:

mvn clean compile site

Lassen Sie uns weitermachen und herausfinden, wie wir den Build scheitern lassen können, wenn FindBugs Probleme in unserem Quellcode findet.

Anwendungsfall 2:Build fehlschlagen, wenn Probleme gefunden werden

Wenn wir sicher sein wollen, dass unser Code nicht einmal ein kleines Problem enthält, ist es möglicherweise eine gute Idee, jedes Mal, wenn unser Projekt kompiliert wird, eine statische Codeanalyse durchzuführen. Dies ist natürlich nur sinnvoll, wenn der Build fehlschlägt, wenn ein Problem gefunden wird.

Mit anderen Worten, wir müssen das FindBugs-Maven-Plugin so konfigurieren, dass der Build fehlschlägt, wenn Probleme gefunden werden. Wir können dies tun, indem wir diesen Schritten folgen:

  1. Fügen Sie die Plugin-Deklaration zu den Plugins hinzu Abschnitt der pom.xml Datei.
  2. Konfigurieren Sie das FindBugs-Maven-Plugin, indem Sie diesen Schritten folgen:
    1. Stellen Sie sicher, dass die genaueste Analyse durchgeführt wird.
    2. Stellen Sie sicher, dass alle Fehler gemeldet werden.
    3. Stellen Sie sicher, dass der XML-Bericht generiert wird.
    4. Konfigurieren Sie das Plugin, um den XML-Bericht im Verzeichnis ${project.build.directory}/findbugs zu erstellen .
  3. Fügen Sie eine Ausführung hinzu, die die Prüfung des Plugins ausführt Ziel während der Kompilierung Lebenszyklusphase von Maven.

Der relevante Teil der pom.xml Datei sieht wie folgt aus:

<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>

Diese Konfiguration stellt sicher, dass das Prüfziel des Maven FindBugs-Plug-Ins während der Maven-Lebenszyklusphase zum Kompilieren aufgerufen wird. Wenn FindBugs Probleme im Quellcode findet, schlägt der Build fehl.

Lassen Sie uns weitermachen und herausfinden, wie wir einen XML-Bericht erstellen können, ohne die Site zu erstellen oder den Build zu verfehlen.

Anwendungsfall 3:XML-Bericht erstellen, ohne dass der Build fehlschlägt

Wenn wir Jenkins in FindBugs integrieren wollen, müssen wir einen Weg finden, XML-Berichte zu erstellen, ohne dass der Build fehlschlägt.

Wir können das FindBugs-Maven-Plug-in so konfigurieren, dass dies geschieht, indem Sie diesen Schritten folgen:

  1. Konfigurieren Sie das FindBugs-Maven-Plugin wie im vorherigen Abschnitt beschrieben (Anwendungsfall 2).
  2. Stellen Sie sicher, dass der Build nicht fehlschlägt, wenn Probleme gefunden werden, indem Sie den Wert von failOnError festlegen Konfigurationseigenschaft auf false .

Der relevante Teil der pom.xml Datei sieht wie folgt aus:

<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>

Wir können jetzt den XML-Bericht erstellen, indem wir das Projekt kompilieren.

Der letzte Anwendungsfall beschreibt, wie wir sowohl XML- als auch HTML-Berichte erstellen können, ohne die Website zu erstellen oder den Build fehlschlagen zu lassen. Mal sehen, wie das gemacht wird.

Anwendungsfall 4:Erstellen Sie sowohl XML- als auch HTML-Berichte, ohne die Website zu erstellen

Wenn wir sowohl XML- als auch HTML-Berichte erstellen möchten, ohne die Projektwebsite zu erstellen oder den Build fehlschlagen zu lassen, müssen wir die folgenden Schritte ausführen:

  1. Konfigurieren Sie das FindBugs-Maven-Plugin wie im vorherigen Abschnitt beschrieben (Anwendungsfall 3).
  2. Fügen Sie die Deklaration des XML-Maven-Plugins zu den Plugins hinzu Abschnitt der pom.xml Datei.
  3. Konfigurieren Sie das Plugin, indem Sie diesen Schritten folgen:
    1. Erstellen Sie einen Transformationssatz, der alle gefundenen XML-Dateien aus ${project.build.directory}/findbugs transformiert Verzeichnis und schreibt die Ergebnisse der XSLT-Transformation in dasselbe Verzeichnis.
    2. Stylesheet konfigurieren, das die Ausgabe der XSLT-Transformation spezifiziert. Die FindBugs-Bibliothek stellt fünf Stylesheets bereit, die für diesen Zweck verwendet werden können. Die verfügbaren Stylesheets sind in der Beispielkonfiguration beschrieben.
    3. Stellen Sie sicher, dass alle Ausgabedateien der XSLT-Transformation die Dateierweiterung .html haben .
  4. Fügen Sie eine Ausführung hinzu, die die Transformation aufruft Ziel des XML-Maven-Plugins während des Kompilierens Lebenszyklusphase von Maven.
  5. Füge FindBugs (Version 2.0.1) als Abhängigkeit des Plugins hinzu.

Der relevante Teil der pom.xml Datei sieht wie folgt aus:

<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>

Wir können jetzt sowohl HTML- als auch XML-Berichte erstellen, indem wir unser Projekt kompilieren.

Zusammenfassung

Wir haben nun vier typische Anwendungsfälle des FindBugs-Maven-Plugins identifiziert und erfahren, wie wir das Plugin konfigurieren können, um jeden Anwendungsfall zu unterstützen.

Wenn Sie einen Anwendungsfall kennen, der in diesem Tutorial nicht behandelt wurde, lassen Sie es mich bitte wissen, indem Sie einen Kommentar zu diesem Blogbeitrag hinterlassen.


Java-Tag