2010-10-27 76 views
9

我有一個多項目設置,使用Maven和Findbugs插件。我需要排除其中一個子項目中的一些文件,所以我將它添加到findbugs-exclude.xml。這在我建立子項目時起作用。Findbugs Maven插件 - findbugs-exclude與多個項目

我試圖在頂層構建時出現問題。 Maven在子項目中找不到findbugs-exclude.xml。所以它不會忽略我的錯誤,並因爲它們而失敗。我可以將我的findbugs-exclude.xml置於頂層目錄,排除工作。但是這是污染最高水平,並且不會被看好。

有沒有辦法讓Maven插件使用子目錄中的findbugs-exclude.xml文件?最好幾乎沒有變化的頂層?此

+0

在這個問題上的任何命中?我發現自己也有相同的需求,試圖從父pom文件 – 2010-11-29 22:40:44

+0

中獲取對放置在子項目中的排除文件的引用,但我仍然沒有很好的解決方案。現在我只是在兩個地方更新文件。違反幹,惡作劇。 – 2010-11-30 18:43:27

回答

2

一種解決方案是創建一個包含了FindBugs的-excludes.xml一個單獨的項目,然後使用依賴插件解壓,並在那裏的要求是這樣的地方放置:

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

有了這個如果需要,您可以在項目之間共享此排除文件,這可能是好的或壞的事情,具體取決於您如何看待它:) 另外,考慮一下,如果您有專門的findbugs項目,您可以創建不同的風味使用分類器的排除和根據上下文使用特定的分類器。 這不是完美的,但它適用於我。

HTH, 詹姆斯

2

以下是我在我的當前項目正在做的,它把findbugs-exclude.xml父項目(我知道你不想要的),但它修復維護它的乾燥問題在兩個地方。這比拆包更簡單,但要求整個項目結構是本地的。 (我認爲解包解決方案對於在許多項目中使用相同的配置很有用,就像在企業環境中一樣)。

我將我的findbugs配置存儲在parent/src/main/resources/shared/findbugs-exclude.xml中,但只要它位於父項的特定目錄中,沒關係。

然後我使用屬性來描述「共享」目錄的位置:

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

而且在父配置的FindBugs時引用這些屬性:

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

所有直接子項目現在運行findbugs,引用父文件中的配置文件。如果您有多個級別的項目嵌套,則必須覆蓋子父項中的myproject.parent.basedir。例如,如果您有家長< - 亞父< - 孩子,你會放:

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

到接受的答案一個更好的選擇是使用Maven的遠程資源 - 插件。我喜歡James的方法,但你需要調整乾淨的插件來刪除src文件夾中的解壓縮文件。

根據James的建議創建一個包含findbugs-excludes的獨立項目。xml和以下內容添加到它的POM文件:

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

更新包含FindBugs的插件的POM文件:

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

不要忘記更改com.myproject:myartifactid:版本

maven-remote-resources-plugin將您的共享文件複製到目標文件夾,因此無需更改maven-clean-plugin的默認行爲。

0

如果您沒有很多要排除的文件/軟件包,只要禁止一些警告 - 嘗試使用@SuppressFBWarning註釋。這應該適用於多個模塊項目,並且可以在需要的特定項目和文件中添加註釋。

依賴關係@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>