2010-10-27 29 views
9

Tôi đã thiết lập nhiều dự án, sử dụng Maven và plugin Findbugs. Tôi cần loại trừ một số tệp trong một trong các dự án con, vì vậy tôi đã thêm nó vào findbugs-exclude.xml. Điều đó hoạt động khi tôi xây dựng trong tiểu dự án.Findbugs Maven plugin - findbugs-exclude với nhiều dự án

Sự cố của tôi xuất hiện khi tôi cố gắng xây dựng ở cấp cao nhất. Maven không tìm thấy số findbugs-exclude.xml trong tiểu dự án. Vì vậy, nó không bỏ qua lỗi của tôi và không thành công vì chúng. Tôi có thể đặt findbugs-exclude.xml trong thư mục cấp cao nhất và loại trừ hoạt động. Nhưng điều đó gây ô nhiễm mức cao nhất, và sẽ không được xem xét một cách thuận lợi.

Có cách nào để tải plugin Maven sử dụng tệp findbugs-exclude.xml từ thư mục con không? Tốt hơn với ít hoặc không có thay đổi ở cấp cao nhất?

+0

Bất kỳ hits về câu hỏi này? Tôi thấy mình với cùng một nhu cầu, cố gắng để có được một tham chiếu đến các tập tin loại trừ được đặt trong dự án con từ file pom cha mẹ –

+0

Không, tôi vẫn không có một giải pháp tốt. Bây giờ tôi chỉ cập nhật các tập tin ở cả hai nơi. Vi phạm DRY, yuck. –

Trả lời

2

Một giải pháp cho việc này là tạo ra một dự án riêng biệt chứa các FindBugs-excludes.xml và sau đó sử dụng các plugin phụ thuộc để giải nén và đặt nó tại địa phương nơi nó cần một cái gì đó như thế này:

<profile> 
    <id>static-analysis</id> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>unpack-findbugs</id> 
         <phase>process-resources</phase> 
         <goals> 
          <goal>unpack</goal> 
         </goals> 
         <configuration> 
          <artifactItems> 
           <artifactItem> 
            <groupId>com.myproject</groupId> 
            <artifactId>my-findbugs</artifactId> 
            <version>0.1-SNAPSHOT</version> 
            <type>jar</type> 
            <overWrite>true</overWrite> 
            <outputDirectory>src/main/findbugs/</outputDirectory> 
           </artifactItem> 
          </artifactItems> 
          <!-- other configurations here --> 
          <excludes>META-INF/</excludes> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>findbugs-maven-plugin</artifactId> 
       <configuration> 
        <xmlOutput>true</xmlOutput> 
        <!-- Optional directory to put findbugs xdoc xml report --> 
        <xmlOutputDirectory>target/findbugs</xmlOutputDirectory> 
        <effort>Max</effort> 
        <threshold>Low</threshold> 
        <excludeFilterFile>src/main/findbugs/findbugs-excludes.xml</excludeFilterFile> 
       </configuration> 
       <executions> 
        <execution> 
         <id>findbugs-run</id> 
         <phase>compile</phase> 
         <goals> 
          <goal>check</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</profile> 

Với điều này tiếp cận bạn có thể chia sẻ tệp loại trừ này qua các dự án nếu yêu cầu có thể là một điều tốt hay xấu tùy thuộc vào cách bạn nhìn vào nó :) Ngoài ra, suy nghĩ về nó, nếu bạn có dự án tìm kiếm chuyên dụng, bạn có thể tạo ra các hương vị khác nhau của loại trừ bằng cách sử dụng các trình phân loại và sử dụng một trình phân loại cụ thể tùy thuộc vào ngữ cảnh. Nó không hoàn hảo nhưng nó hoạt động cho tôi.

HTH, James

2

Đây là những gì tôi đang làm trong dự án hiện tại của tôi, nó đặt findbugs-exclude.xml trong dự án cha mẹ (mà tôi biết bạn không muốn), nhưng nó sửa chữa vấn đề DRY của việc duy trì nó ở hai nơi. Nó đơn giản hơn việc giải nén, nhưng yêu cầu cấu trúc dự án đầy đủ phải là cục bộ. (Tôi nghĩ rằng giải pháp giải nén sẽ hữu ích khi sử dụng cùng một cấu hình trên nhiều dự án, như trong môi trường công ty.)

Tôi lưu trữ cấu hình tìm kiếm của mình trong parent/src/main/resources/shared/findbugs-exclude.xml, nhưng miễn là nó nằm trong thư mục cụ thể thì không ' t vấn đề.

sau đó tôi sử dụng thuộc tính để mô tả vị trí của thư mục 'chia sẻ':

<properties> 
    <myproject.parent.basedir>${project.parent.basedir}</myproject.parent.basedir> 
    <myproject.parent.shared.resources>${myproject.parent.basedir}/src/main/resources/shared</myproject.parent.shared.resources> 
</properties> 

Và tham khảo các đặc tính này khi cấu hình FindBugs trong các phụ huynh:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>findbugs-maven-plugin</artifactId> 
    <configuration> 
     <excludeFilterFile>${myproject.parent.shared.resources}/findbugs-exclude.xml</excludeFilterFile> 
    </configuration> 
    ... 
</plugin> 

Tất cả các dự án con trực tiếp bây giờ sẽ chạy findbugs, tham khảo các tập tin cấu hình trong phụ huynh. Nếu bạn có nhiều cấp độ lồng ghép dự án, bạn sẽ phải ghi đè lên số myproject.parent.basedir trong phụ huynh. Ví dụ nếu bạn có cha mẹ < - phụ mẹ < - đứa trẻ, bạn sẽ đặt:

<properties> 
    <myproject.parent.basedir>${project.parent.parent.basedir}</myproject.parent.basedir> 
</properties> 
0

Một lựa chọn tốt hơn để câu trả lời được chấp nhận là sử dụng maven-xa-nguồn-plugin. Tôi thích cách tiếp cận của James nhưng sau đó bạn cần phải tinh chỉnh các plugin sạch để xóa các tập tin giải nén trong thư mục src.

Theo đề xuất của James, hãy tạo một dự án riêng biệt có chứa các tìm kiếm-không bao gồm.xml và thêm dòng sau vào tập tin pom của nó:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-remote-resources-plugin</artifactId> 
      <version>1.5</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>bundle</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <includes> 
        <include>**/*.*</include> 
       </includes> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Cập nhật các tập tin pom chứa FindBugs plugin:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-remote-resources-plugin</artifactId> 
    <version>1.5</version> 
    <executions> 
     <execution> 
      <id>process-remote-resources</id> 
      <goals> 
       <goal>process</goal> 
      </goals> 
      <configuration> 
       <resourceBundles> 
        <resourceBundle>com.myproject:myartifactid:version</resourceBundle> 
       </resourceBundles> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>findbugs-maven-plugin</artifactId> 
    <configuration> 
     ... 
     ... 
     <excludeFilterFile>${project.build.directory}/maven-shared-archive-resources/findbugs-exclude.xml</excludeFilterFile> 
     ...   
    </configuration> 
</plugin> 

Đừng quên thay đổi com.myproject: myartifactid: phiên bản

maven-remote-resources-plugin sao chép các tệp được chia sẻ của bạn vào thư mục đích, do đó không cần phải thay đổi hành vi mặc định của maven-clean-plugin.

0

Nếu bạn không có nhiều tệp/gói để loại trừ, chỉ cần chặn một số cảnh báo - hãy thử sử dụng chú thích @SuppressFBWarning. Điều đó sẽ làm việc với nhiều dự án mô-đun và chú thích có thể được thêm vào trong các dự án và tệp cụ thể nếu cần.

phụ thuộc cho @SuppressFBWarning

<dependency> 
     <groupId>com.google.code.findbugs</groupId> 
     <artifactId>annotations</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.google.code.findbugs</groupId> 
     <artifactId>jsr305</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
    </dependency> 
Các vấn đề liên quan