2009-08-11 24 views
7

Có ai biết cách cấu hình plugin tìm kiếm maven để đưa ra một bản tóm tắt các lỗi cho bảng điều khiển (tương tự như plugin pmd) không?Tìm kiếm Maven: kiểm tra - Tóm tắt đầu ra của lỗi

Tại các bộ tìm kiếm hiện tại: hãy kiểm tra xem có bao nhiêu lỗi trong tổng số và tôi cần kiểm tra từng thư mục target/findbugs và từng tệp findbugs.xml để khắc phục sự cố.

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

Tốt nhất là nên báo cáo tóm tắt lại trên dòng lệnh. Bất kỳ ý tưởng?

+0

Tôi thực sự không thể hiểu tại sao tính năng này không được triển khai trước tiên trong plugin ... Lạ. – yegor256

+0

Đã gửi một vé: https://sourceforge.net/tracker/?func=detail&aid=3111339&group_id=61626&atid=497856 – yegor256

Trả lời

3

Hiện tại không có phương tiện để thực hiện việc này bằng plugin chuẩn. Bạn có thể tạo một plugin để đọc findbugsChecks.xml và xuất thông tin bạn cần.

Mã bên dưới sẽ xuất tổng số lỗi tìm thấy và các lỗi trên mỗi gói cho bất kỳ dự án nào bằng findbugsChecks.xml trong thư mục đầu ra. Bạn có thể cấu hình tên của tập tin nó đọc bằng cách thiết lập thuộc tính findBugsChecks vào cấu hình:

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

Để gói mã này, thêm nó vào src chính thư mục// java của một Mavenproject với POM như thế này:

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

Sau đó chạy mvn install để cài đặt plugin.

Để thực sự sử dụng nó, bạn có thể chạy nó như một mục tiêu bổ sung trên dòng lệnh, hoặc liên kết nó với dự án của bạn để chạy như một phần của vòng đời tiêu chuẩn.

Đây là lệnh để chạy từ dòng lệnh (giả sử dự án trước đây đã được biên soạn:

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

Để ràng buộc cấu hình để dự án của bạn vì vậy nó sẽ được chạy trên từng xây dựng, sử dụng cấu hình sau:

<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

Câu hỏi ngớ ngẩn: Tại sao bạn xác định các thực thi trong khai báo 'findbugs-maven-plugin' của bạn? – Snekse

3

Theo sau các khái niệm ở trên, tôi đã nêu ra vấn đề này trên trình theo dõi vấn đề tìm kiếm con maven http://jira.codehaus.org/browse/MFINDBUGS-118.Tôi cũng đã mã hóa và gửi một bản vá cho biết tổng số lỗi cho từng dự án. o lấy các chi tiết khác.

Mã bỏ qua các dự án được chỉ định khi tạo kết quả đầu ra POM và cũng bỏ qua các dự án có POM xác định đúng trong cấu hình tìm kiếm của chúng. Chúng tôi đang chạy một mô-đun maven đa mô-đun lớn với bản vá được áp dụng.

Với vá áp dụng bạn chạy FindBugs mvn: kiểm tra và bạn sẽ có được một cái gì đó giống như đầu ra sau đây (đầu ra obfuscated để bảo vệ tội :):

[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

Liên kết tới lỗi JIRA bị hỏng – yegor256

+0

Chỉ cần sử dụng phiên bản 2.5 trở lên của plugin. –

4

tôi sử dụng hack này, dựa trên 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> 
0

Bạn có thể thực hiện việc này với Violations Maven Plugin. Nó được cấu hình với các mẫu để xác định các tệp báo cáo trên hệ thống tệp. Nó cần phải chạy sau khi tìm kiếm, hoặc bất kỳ công cụ phân tích mã tĩnh nào khác.

Nó sẽ

  • In vi phạm trong xây dựng log.
  • Tùy chọn không xây dựng nếu số lượng vi phạm tìm thấy cao hơn sau đó một số được cấu hình.
Các vấn đề liên quan