2009-08-11 11 views
7

Czy ktoś wie, jak skonfigurować wtyczkę maven findbugs, aby wyświetlać podsumowanie błędów na konsoli (podobnie do wtyczki pmd)?Moun findbugs: check - Podsumowanie wyników błędów

Obecnie findbugs: sprawdź, po prostu wypisuje, ile błędów jest w sumie i muszę sprawdzić poszczególne moduły katalog docelowy/findbugs i każdy plik findbugs.xml, aby rozwiązać problemy.

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

Byłoby dobrze, aby uzyskać raport podsumowujący z powrotem w wierszu poleceń. Jakieś pomysły?

+0

I faktycznie nie może zrozumieć, dlaczego ta funkcja nie został zrealizowany pierwszy w plugin ... Dziwne. – yegor256

+0

Zgłoszony bilet: https://sourceforge.net/tracker/?func=detail&aid=3111339&group_id=61626&atid=497856 – yegor256

Odpowiedz

3

Obecnie nie ma sposobu, aby to zrobić za pomocą standardowej wtyczki. Możesz utworzyć wtyczkę, aby przeczytać plik findbugsChecks.xml i wyprowadzić potrzebne informacje.

Poniższy kod wyświetli łącznie znalezione błędy i błędy w pakiecie dla dowolnego projektu z plikiem findbugsChecks.xml w katalogu wyjściowym. Można skonfigurować nazwę pliku odczytuje poprzez ustawienie właściwości findBugsChecks od konfiguracji:

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); 
      } 
     } 
    } 
} 

do spakowania tego kodu, dodać go do src/głównego katalogu/JAVA z Mavenproject z POM tak:

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

Następnie uruchom mvn zainstalować zainstalować wtyczkę.

Aby faktycznie z niego skorzystać, można go uruchomić jako dodatkowy cel w wierszu poleceń lub powiązać go z projektem, aby działał jako część standardowego cyklu życia.

Oto polecenie, aby uruchomić z linii poleceń (zakładając, że projekt został wcześniej skompilowany:

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

Aby powiązać konfiguracje do projektu tak to będzie działać na każdej budowie, należy użyć następującej konfiguracji:

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

Głupi pytanie: Dlaczego zdefiniowania egzekucje w swoim 'deklaracji findbugs-maven-plugin'? – Snekse

3

następstwie wraz z koncepcjami powyżej ja podniosły tę kwestię w findbugs Maven emisyjnej trackera. http://jira.codehaus.org/browse/MFINDBUGS-118. mam również kodowane i przedstawiła poprawkę, która wykazuje sumę błędów dla każdego projektu. to może być łatwo modyfikowany t o uzyskać inne szczegóły.

Kod ignoruje projekty określone jako produkujące wyniki POM, a także ignoruje projekty, w których POM określa prawdę w konfiguracji findbugs. Prowadzimy dużą wielomodułową konstrukcję maven z nałożoną łatką.

Z plastra stosowana uruchomieniu findbugs mvn: sprawdź i masz coś jak poniżej (wyjście ukrywane, aby chronić winnych :):

[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 
+0

Link do JIRA błędu jest uszkodzony – yegor256

+0

Wystarczy użyć wersji 2.5 lub nowszej wtyczki. –

4

Używam tego hack, w oparciu o Maven-groovy- wtyczka:

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

Możesz to zrobić pod numerem Violations Maven Plugin. Jest on skonfigurowany z wzorcami w celu identyfikacji plików raportu w systemie plików. Musi działać po findbugs lub jakimkolwiek innym narzędziu do analizy kodu statycznego.

Będzie

  • Drukuj naruszenia w dzienniku budowy.
  • Opcjonalnie nie kompilacji jeśli liczba naruszeń stwierdzonych jest wyższa niż skonfigurowanego numeru.