2012-02-13 74 views
4

更新不耐煩:很簡單,使用package.-的子包掃描代替package.*,作爲每下面martoe的回答!Maven的Codehaus的FindBugs的插件「onlyAnalyze」選項工作不正常

我似乎無法得到onlyAnalyze我的多模塊項目的工作:不管什麼包(或模式)我設置,Maven的FindBugs的-插件作爲我從它傳遞PACKAGENAME預期不計算子包。*。

爲了證明自己或者或故障插件(雖然我總是假設是前者!),我安裝具有以下結構的小Maven項目:

pom.xml 
src/ 
    main/java/acme/App.java 
    main/java/acme/moo/App.java 
    main/java/no_detect/App.java 

這是很簡單的!

的POM具有以下FindBugs的配置:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>findbugs-maven-plugin</artifactId> 
      <version>2.4.0</version> 
      <executions> 
       <execution> 
        <phase>verify</phase> 
        <goals><goal>findbugs</goal><goal>check</goal></goals> 
       </execution> 
      </executions> 
      <configuration> 
       <debug>true</debug> 
       <effort>Max</effort> 
       <threshold>Low</threshold> 
       <onlyAnalyze>acme.*</onlyAnalyze> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

,每App.java有兩個明顯的違規下面的代碼:

package acme; 
import java.io.Serializable; 

public class App implements Serializable 
{ 
    private static final class NotSer { 
     private String meh = "meh"; 
    } 

    private static final NotSer ns = new NotSer();// Violation: not serializable field 

    public static void main(String[] args) 
    { 
     ns.meh = "hehehe";// Vilation: unused 
     System.out.println("Hello World!"); 
    } 
} 

注意no_detect.App具有相同的內容上面,但我的期望是,它不會被findbugs評估,因爲我的「onlyAnalyze」選項設置爲acme.*,我認爲它會評估acme.Appacme.moo.App而沒有任何el SE。

我現在執行mvn clean install清理,構建,測試,運行FindBugs的,包裝,安裝,產生預計在構建失敗以下FindBugs的報告(剪斷,爲了簡潔)和結果,因爲acme.Appacme.moo.App

<BugInstance category='BAD_PRACTICE' type='SE_NO_SERIALVERSIONID' instanceOccurrenceMax='0'> 
<ShortMessage>Class is Serializable, but doesn't define serialVersionUID</ShortMessage> 
<LongMessage>acme.App is Serializable; consider declaring a serialVersionUID</LongMessage> 
<Details> 
    &lt;p&gt; This field is never read.&amp;nbsp; Consider removing it from the class.&lt;/p&gt; 
</Details> 
<BugPattern category='BAD_PRACTICE' abbrev='SnVI' type='SE_NO_SERIALVERSIONID'><ShortDescription>Class is Serializable, but doesn't define serialVersionUID</ShortDescription><Details> 
<BugCode abbrev='UrF'><Description>Unread field</Description></BugCode><BugCode abbrev='SnVI'><Description>Serializable class with no Version ID</Description></BugCode> 

總結:僅acme.App分析,acme.moo.App不是(壞)既不是no_detect.App(好)。

我有兩個通配符試圖在onlyAnalyze選擇,但產生一個成功構建但有FindBugs的錯誤(Dangling meta character '*'等)。

我試着用onlyAnalyze設置爲acme.*,acme.moo.*,其分析所有預期的類(acme.Appacme.moo.App),這意味着它「作品」,而不是如我所料;即我必須明確聲明我想分析的類的所有父包:這可能會在多模塊項目中變得很大且難以維護!

我是否必須定義每個我想要分析的軟件包,或者我可以聲明一個通配符/正則表達式模式,以實現我想要的功能?

,因爲這需要更多的設置和推理,我目前沒有時間......

回答

9

舉了Findbugs manual我寧可不使用包含/排除XML:「替換*帶。 - 也分析所有子包「

+0

在我的挫折和瘋狂的搜索我設法不實際RTFM - 儘管公平我從來沒有實際上找到自己的文檔。謝謝! – 2012-02-15 09:54:23