7

バグの要約をコンソールに出力するようにmavenfindbugsプラグインを構成する方法を知っている人はいますか(pmdプラグインと同様)?

現在、findbugs:checkは、合計でいくつのバグがあるかを出力するだけであり、問​​題を修正するには、個々のモジュールの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>

理想的には、コマンドラインで要約レポートを取得するとよいでしょう。何か案は?

4

4 に答える 4

4

私は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>
于 2010-11-18T09:10:15.677 に答える
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 / main/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>

次に、mvninstallを実行してプラグインをインストールします。

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

コマンドラインから実行するコマンドは次のとおりです(プロジェクトが以前にコンパイルされていると仮定します。

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

構成をプロジェクトにバインドして、ビルドごとに実行されるようにするには、次の構成を使用します。

<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>
于 2009-08-12T09:00:59.697 に答える
3

上記の概念に続いて、mavenfindbugs問題追跡システムでこの問題を提起しました。http://jira.codehaus.org/browse/MFINDBUGS-118。また、各プロジェクトのバグの総数を示すパッチをコーディングして提出しました。他の詳細を取得するために簡単に変更できます。

このコードは、POM出力を生成するように指定されたプロジェクトを無視し、findbugs構成でPOMがtrueを指定しているプロジェクトも無視します。パッチが適用された大規模なマルチモジュールMavenビルドを実行しています。

パッチを適用した状態でmvnfindbugs:checkを実行すると、次のような出力が得られます(有罪を保護するために出力が難読化されています:):

[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
于 2010-06-30T04:13:05.750 に答える
0

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

そうなる

  • 違反をビルドログに出力します。
  • 見つかった違反の数が構成された数よりも多い場合は、オプションでビルドに失敗します。
于 2017-12-26T19:28:49.893 に答える