Java >> Java tutorial >  >> Tag >> maven

FindBugs Maven Plugin Tutorial

FindBugs er et statisk kodeanalyseværktøj, som identificerer problemer fundet fra Java-kode.

Vi kan integrere FindBugs i vores byggeproces ved at bruge FindBugs Maven-plugin. Dette blogindlæg identificerer fire typiske use cases og beskriver, hvordan vi kan konfigurere FindBugs Maven plugin til at understøtte hver use case.

De beskrevne use cases er:

  1. Opret FindBugs-rapport som en del af projektrapporterne.
  2. Bygningen mislykkes, hvis FindBugs finder problemer fra kildekoden.
  3. Opret en XML-rapport uden at fejle opbygningen.
  4. Opret både XML- og HTML-rapporter uden at oprette webstedet.

Lad os komme igang.

Brug Case 1:Opret Findbugs-rapport som en del af projektrapporterne

Nogle gange ønsker vi ikke at køre statisk kodeanalyse hver gang, når vores projekt er kompileret. I stedet vil vi køre det manuelt, når vi har brug for det. Hvis dette er tilfældet, er vores bedste mulighed at oprette FindBugs-rapporten, når vi opretter webstedet for projektet.

Vi kan gøre dette ved at følge disse trin:

  1. Tilføj erklæringen om FindBugs Maven-pluginnet til rapporteringen sektionen af ​​pom.xml fil.
  2. Konfigurer FindBugs Maven-pluginnet ved at følge disse trin:
    1. Sørg for, at den mest nøjagtige analyse udføres.
    2. Sørg for, at alle fejl rapporteres.
    3. Sørg for, at XML-rapporten er genereret.

Den relevante del af pom.xml fil ser ud som følger:

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

Med andre ord, når vi vil oprette FindBugs-rapporten, skal vi køre følgende kommando ved kommandoprompten:

mvn clean compile site

Lad os gå videre og finde ud af, hvordan vi kan fejle opbygningen, hvis FindBugs finder problemer fra vores kildekode.

Use Case 2:Mislykkes Build, hvis der findes problemer

Hvis vi vil være sikre på, at vores kode ikke engang indeholder et mindre problem, kan det være en god idé at køre statisk kodeanalyse hver gang, når vores projekt kompileres. Dette giver selvfølgelig kun mening, hvis bygningen mislykkes, når der er fundet et problem.

Med andre ord er vi nødt til at konfigurere FindBugs Maven-plugin'et til at fejle opbygningen, hvis der findes problemer. Vi kan gøre dette ved at følge disse trin:

  1. Tilføj plugin-erklæringen til plugins sektionen af ​​pom.xml fil.
  2. Konfigurer FindBugs Maven-pluginnet ved at følge disse trin:
    1. Sørg for, at den mest nøjagtige analyse udføres.
    2. Sørg for, at alle fejl rapporteres.
    3. Sørg for, at XML-rapporten er genereret.
    4. Konfigurer plugin'et til at oprette XML-rapporten til mappen ${project.build.directory}/findbugs .
  3. Tilføj en udførelse, som kører pluginnets check mål under kompileringen Maven livscyklusfase.

Den relevante del af pom.xml fil ser ud som følger:

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

Denne konfiguration sikrer, at kontrolmålet for Maven FindBugs-plugin'et påkaldes under kompileringsfasen af ​​Mavens livscyklus. Hvis FindBugs finder problemer fra kildekoden, mislykkes den i build.

Lad os gå videre og finde ud af, hvordan vi kan oprette XML-rapporter uden at oprette webstedet eller fejle opbygningen.

Use Case 3:Opret XML-rapport uden at fejle Build

Hvis vi ønsker at integrere Jenkins med FindBugs, skal vi finde en måde at oprette XML-rapporter på uden at fejle opbygningen.

Vi kan konfigurere FindBugs Maven-plugin'et til at gøre dette ved at følge disse trin:

  1. Konfigurer FindBugs Maven-pluginnet som beskrevet i det foregående afsnit (Use case 2).
  2. Sørg for, at buildet ikke fejler, hvis der findes problemer ved at indstille værdien af ​​failOnError konfigurationsegenskaben til false .

Den relevante del af pom.xml fil ser ud som følger:

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

Vi kan nu oprette XML-rapporten ved at kompilere projektet.

Den sidste use case beskriver, hvordan vi kan oprette både XML- og HTML-rapporter uden at oprette webstedet eller fejle opbygningen. Lad os se, hvordan dette gøres.

Brug Case 4:Opret både XML- og HTML-rapporter uden at oprette webstedet

Hvis vi ønsker at oprette både XML- og HTML-rapporter uden at oprette projektwebstedet eller fejle opbygningen, skal vi følge disse trin:

  1. Konfigurer FindBugs Maven-plugin'et som beskrevet i det foregående afsnit (brug case 3).
  2. Tilføj erklæringen om XML Maven Plugin til plugins sektionen af ​​pom.xml fil.
  3. Konfigurer pluginnet ved at følge disse trin:
    1. Opret et transformationssæt, som transformerer alle XML-filer fundet fra ${project.build.directory}/findbugs mappe og skriver resultaterne af XSLT-transformationen til den samme mappe.
    2. Konfigurer stilark, der specificerer output fra XSLT-transformationen. FindBugs-biblioteket indeholder fem stylesheets, som kan bruges til dette formål. De tilgængelige stylesheets er beskrevet i eksempelkonfigurationen.
    3. Sørg for, at alle outputfiler i XSLT-transformationen har filtypenavnet .html .
  4. Tilføj en udførelse, der påkalder transformationen mål for XML Maven-plugin'et under kompileringen Maven livscyklusfase.
  5. Tilføj FindBugs (version 2.0.1) som pluginnets afhængighed.

Den relevante del af pom.xml fil ser ud som følger:

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

Vi kan nu oprette både HTML- og XML-rapporter ved at kompilere vores projekt.

Oversigt

Vi har nu identificeret fire typiske use cases af FindBugs Maven plugin og lært, hvordan vi kan konfigurere plugin til at understøtte hver use case.

Hvis du kender et use case, der ikke var dækket af denne vejledning, så lad mig det vide ved at efterlade en kommentar til dette blogindlæg.


Java tag