2009-08-11 9 views
7

誰かがコンソールにバグの要約を出力するようにmaven findbugsプラグインを設定する方法を知っていますか(pmdプラグインに似ていますか?Maven findbugs:check - バグの出力の概要

現在のところ、findbugs:checkは、合計でいくつのバグがあるかを表示しています。個々のmodules target/findbugsディレクトリと各findbugs.xmlファイルを調べて問題を修正する必要があります。

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

理想的には、コマンドラインで要約レポートを取得することをお勧めします。何か案は?

+0

私は実際にこの機能がプラグインで最初に実装されなかった理由を理解できません... Strange。 – yegor256

+0

チケットを送信しました:https://sourceforge.net/tracker/?func=detail&aid=3111339&group_id=61626&atid=497856 – yegor256

答えて

3

現在、標準プラグインを使用してこれを行う方法はありません。 findbugsChecks.xmlを読み込んで必要な情報を出力するためのプラグインを作成することができます。

以下のコードは、findbugsChecks.xmlを出力ディレクトリに持つすべてのプロジェクトのバグの合計とパッケージごとのバグを出力します。あなたは、設定にfindBugsChecksプロパティを設定することによって、読み込むファイルの名前を設定することができます。

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

このようなPOMとMavenprojectのSRC /メイン/ javaのフォルダに追加し、このコードをパッケージ化するには:その後

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

を実行MVNプラグインをインストールするをインストールします。

実際に使用するには、コマンドラインで追加の目標として実行するか、プロジェクトにバインドして標準ライフサイクルの一部として実行します。

:以下の構成を使用し、

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

それは各ビルド上で実行されますので、プロジェクトに構成をバインドするには:ここで

は、プロジェクトが以前にコンパイルされたと仮定すると(コマンドラインから実行するコマンドです私はMavenのFindBugsの課題追跡でこの問題を提起した上での概念からに沿って続いて

<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

あなたは 'findbugs-maven-plugin'宣言で実行を定義するのはなぜですか? – Snekse

3

http://jira.codehaus.org/browse/MFINDBUGS-118。私はまた、コード化され、プロジェクトごとに合計バグを示してパッチを提出した。これは、簡単に修正することができトン他の詳細を取得する。

コードでは、POM出力の生成として指定されたプロジェクトは無視され、POMがfindbugs構成でtrueを指定するプロジェクトは無視されます。パッチを適用した大規模なマルチモジュールビルドビルドを実行しています。確認し、次の出力(有罪:)を保護するために難読化された出力のようなものを得る:mavenの-groovy-に基づいて

[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

JIRAバグへのリンクが壊れています – yegor256

+0

プラグインのバージョン2.5以上を使用してください。 –

4

私はこのハックを使用し、パッチで

あなたはMVNのFindBugsの実行適用しましたプラグイン:

<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

Violations Maven Pluginでこれを行うことができます。ファイルシステム上のレポートファイルを識別するためのパターンで構成されています。 findbugsやその他の静的コード解析ツールの後に実行する必要があります。

それは

  • ビルドログでの違反を印刷します。
  • 違反の数が設定された数より多い場合は、ビルドに失敗します。