Frage

Weiß jemand, wie die Maven findbugs zur Ausgabe einer Zusammenfassung der Fehler auf die Konsole (ähnlich die PMD-Plugin) Plugin konfigurieren?

Derzeit findbugs. Überprüfen gerade druckt, wie viele Fehler es insgesamt sind, und ich brauche die einzelnen Module Ziel / findbugs Verzeichnis und jede findbugs.xml-Datei zu überprüfen, die Probleme zu beheben

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>2.0.1</version>                              
<configuration>
        <xmlOutput>true</xmlOutput>
        <xmlOutputDirectory>findbugsreports</xmlOutputDirectory>
        <findbugsXmlOutput>true</findbugsXmlOutput>
        <findbugsXmlOutputDirectory>target/site/findbugsreports</findbugsXmlOutputDirectory>
        <debug>true</debug>
</configuration> 
</plugin>

Im Idealfall wäre es gut, einen zusammenfassenden Bericht zurück auf der Kommandozeile zu erhalten. Irgendwelche Ideen?

War es hilfreich?

Lösung

Es gibt derzeit kein Mittel, um dies mit der Standard-Plugin zu tun. Sie können ein Plugin erstellen, um die findbugsChecks.xml und geben die Informationen, die Sie benötigen allerdings zu lesen.

Der folgende Code wird ausgegeben fanden die Gesamt Fehler und die Fehler pro Paket für jedes Projekt mit einem findbugsChecks.xml im Ausgabeverzeichnis. Sie können den Namen der es durch Einstellen der findBugsChecks Eigenschaft auf der Konfiguration liest Datei konfigurieren:

package name.seller.rich;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;

/**
 * @goal stats
 */
public class FindbugsStatsMojo extends AbstractMojo {

    /**
     * Where to read the findbugs stats from
     * 
     * @parameter expression="${findbugsChecks}"
     *            default-value="${project.build.directory}/findbugsCheck.xml"
     */
    private File findbugsChecks;

    /**
     * Output the Findbus stats for the project to the console.
     */
    public void execute() throws MojoExecutionException, MojoFailureException {
        if (findbugsChecks != null && findbugsChecks.exists()) {
            try {
                Xpp3Dom dom = Xpp3DomBuilder.build(new FileReader(
                        findbugsChecks));

                // get the summary and output it
                Xpp3Dom summaryDom = dom.getChild("FindBugsSummary");

                // output any information needed
                getLog().info(
                        "Total bug count:"
                                + summaryDom.getAttribute("total_bugs"));

                Xpp3Dom[] packageDoms = summaryDom.getChildren("PackageStats");

                getLog().info(packageDoms.length + " package(s)");
                for (int i = 0; i < packageDoms.length; i++) {
                    String info = new StringBuilder().append("package ")
                            .append(packageDoms[i].getAttribute("package"))
                            .append(": types:").append(
                                    packageDoms[i].getAttribute("total_types"))
                            .append(", bugs:").append(
                                    packageDoms[i].getAttribute("total_bugs"))
                            .toString();
                    getLog().info(info);
                }
            } catch (FileNotFoundException e) {
                throw new MojoExecutionException(
                        "Findbugs checks file missing", e);
            } catch (XmlPullParserException e) {
                throw new MojoExecutionException(
                        "Unable to parse Findbugs checks file", e);
            } catch (IOException e) {
                throw new MojoExecutionException(
                        "Unable to read Findbugs checks file", e);
            }
        }
    }
}

Um diesen Code zu verpacken, fügen Sie ihn in die src / main / java-Ordner eines Mavenproject mit einem POM wie folgt aus:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>name.seller.rich</groupId>
  <artifactId>maven-findbugs-stats-plugin</artifactId>
  <packaging>maven-plugin</packaging>
  <version>0.0.1</version>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-core</artifactId>
      <version>2.2.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>2.2.0</version>
    </dependency>
  </dependencies>
</project>

Führen Sie dann mvn install , um das Plugin zu installieren.

Um es tatsächlich zu nutzen, können Sie es als zusätzliches Ziel auf der Kommandozeile ausführen, oder binden es zu einem Projekt im Rahmen des Standard-Lebenszyklus auszuführen.

Hier ist der Befehl von der Kommandozeile ausgeführt werden (vorausgesetzt, dass das Projekt zuvor kompiliert wurde:

mvn findbugs:check name.seller.rich:maven-findbugs-stats-plugin:0.0.1:stats

die Konfigurationen für Ihr Projekt zu binden, damit es auf jedem Build ausgeführt werden, verwenden Sie die folgende Konfiguration:

<build>
  <plugins>
    <plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>findbugs-maven-plugin</artifactId>
  <version>2.1</version>
  <executions>
    <execution>
      <id>check</id>
      <phase>package</phase>
      <goals>
        <goal>check</goal>
      </goals>
    </execution>
  </executions>                              
  <configuration>
    <xmlOutput>true</xmlOutput>
    <xmlOutputDirectory>findbugsreports</xmlOutputDirectory>
    <findbugsXmlOutput>true</findbugsXmlOutput>
    <findbugsXmlOutputDirectory>${findbugsOutputDirectory}</findbugsXmlOutputDirectory>
    <debug>true</debug>
    <failOnError>false</failOnError>
  </configuration> 
    </plugin>
    <plugin>
    <groupId>name.seller.rich</groupId>
    <artifactId>maven-findbugs-stats-plugin</artifactId>
    <executions>
      <execution>
        <id>stats</id>
        <phase>package</phase>
        <goals>
          <goal>stats</goal>
        </goals>
      </execution>
    </executions>
    </plugin>
  </plugins>
</build>

Andere Tipps

Ich verwende diesen Hack, basierend auf Maven-groovy-Plugin:

<plugin>
  <groupId>org.codehaus.groovy.maven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <version>1.0-rc-5-SNAPSHOT</version>
  <executions>
    <execution>
      <phase>prepare-package</phase>
      <goals>
        <goal>execute</goal>
      </goals>
      <configuration>
        <source>
          def file = new File("${project.build.directory}/findbugsXml.xml")
          if (!file.exists()) {
            fail("Findbugs XML report is absent: " + file.getPath())
          }
          def xml = new XmlParser().parse(file)
          def bugs = xml.BugInstance
          def total = bugs.size()
          if (total &gt; 0) {
            log.info("Total bugs: " + total)
            for (i in 0..total-1) {
              def bug = bugs[i]
              log.info(
                bug.LongMessage.text()
                + " " + bug.Class.'@classname'
                + " " + bug.Class.SourceLine.Message.text()
              )
            }
          }
        </source>
      </configuration>
    </execution>
  </executions>
</plugin>

Nach entlang von den Konzepten oben ich auf dem Maven findbugs issue tracker dieses Thema angesprochen haben. http://jira.codehaus.org/browse/MFINDBUGS-118 . Ich habe auch einen Patch, der zeigt insgesamt Bugs für jedes Projekt codiert und vorgelegt. Es könnte leicht modifiziert werden, um andere Details zu erhalten.

Der Code ignoriert Projekte angegeben als POM Ausgaben produzieren und ignoriert auch Projekte, deren POMs angeben wahr in ihrer findbugs Konfiguration. Wir laufen ein großer Multi-Modul Maven angelegt mit dem Patch bauen.

Mit dem Patch angewendet Sie mvn findbugs laufen: überprüfen und Sie bekommen so etwas wie die folgende Ausgabe (Ausgabe verschleierten zum Schutz der Schuldige:):

[INFO] Summary
[INFO] -------
[INFO] C:\PATH\Abstraction\PalDefinitions\target/findbugsXml.xml  4
[INFO] C:\PATH\System\target/findbugsXml.xml  19
[INFO] C:\PATH\ApplicationLayer\target/findbugsXml.xml  13
[INFO] C:\PATH\Support\ServiceStub\target/findbugsXml.xml  11
[INFO] C:\PATH\Support\MultiPlatform\target/findbugsXml.xml  10
[INFO] C:\PATH\Support\Serializer\target/findbugsXml.xml  19
[INFO] C:\PATH\Support\Brander\target/findbugsXml.xml  19
[INFO] C:\PATH\PlatformAbstraction\Pal1\target/findbugsXml.xml  8
[INFO] C:\PATH\PlatformAbstraction\Pal2\target/findbugsXml.xml  0
[INFO] C:\PATH\PlatformAbstraction\Pal3\target/findbugsXml.xml  0
[INFO] C:\PATH\PlatformAbstraction\Pal4\target/findbugsXml.xml  0
[INFO] C:\PATH\Framework\Common\target/findbugsXml.xml  12
[INFO] C:\PATH\Framework\legacyFramework\target/findbugsXml.xml  7
[INFO] C:\PATH\Framework\UIFramework\target/findbugsXml.xml  7
[INFO] C:\PATH\ExecutionLayer\Stub\target/findbugsXml.xml  0
[INFO] C:\PATH\ExecutionLayer\BB\BB\target/findbugsXml.xml  1
[INFO] TOTAL = 130
[INFO] -------
[INFO] Number of bugs 130 falls BELOW summaryThreshold 260. Check OK

Sie können dies mit Verletzungen Maven Plugin . Es wird mit Mustern konfiguriert ist, um Berichtsdateien auf dem Dateisystem zu identifizieren. Es muss nach findbugs oder jedem anderen statischen Code-Analyse-Tool auszuführen.

Es wird

  • Drucken die Verletzungen im Buildprotokoll.
  • scheitern Optional die Build, wenn Anzahl der gefundenen Verletzungen höher als eine konfigurierte Anzahl ist.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top