2012-02-13 6 views
4

アップデートとして機能していない:それは簡単です、代わりにpackage.*のサブパッケージのスキャンにpackage.-を使用するなど、あたり以下martoeの答え!MavenのCodehausのはFindBugsのはせっかちで予想

マルチモジュールプロジェクトではonlyAnalyzeが動作しないようです:私が設定したパッケージ(またはパターン)に関係なく、maven-findbugs-pluginはpackagenameを渡すことから期待されるようにサブパッケージを評価しません*。

(私はいつもそれが元だと仮定しても!)故障して自分自身やプラグインのいずれかを証明するために、私のセットアップは、以下の構造を持つ小さなMavenプロジェクト:

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

非常に簡単です!

POMは、以下のFindBugsの構成を有している:、no_detect.Appは上記と同じ内容を有すること

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

<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は、2件の明白な違反の次のコードを有しますしかし、私はacme.Appacme.moo.Appと何もelを評価すると仮定したacme.*に設定されている "onlyAnalyze"オプションがあるので、findbugsによって評価されないということです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.Appacme.moo.Appは(悪い)ものではなく、どちらも(良い)no_detect.Appです。

私はonlyAnalyzeオプションに2つのワイルドカードを使用してみましたが、それは成功ビルドが、FindBugsのエラー(Dangling meta character '*'など)とを生成します。

私はそれを「作品」という意味ではなく、私は期待して期待されるすべてのクラス(acme.Appacme.moo.App)を解析acme.*,acme.moo.*からonlyAnalyze設定してみました。つまり、分析したいクラスの親パッケージを明示的に宣言する必要があります。これは、マルチモジュールプロジェクトでは大規模で保守が難しくなる可能性があります。

解析したいすべてのパッケージを定義する必要がありますか、あるいは私がしたいと思うワイルドカード/正規表現のパターンを宣言できますか?

それは私は現在のために...

答えて

9

Findbugs manualを引用する時間がありませんはるかに多くのセットアップと推論が必要ですので、私はむしろ、包含/除外のXMLを使用していないと思います。「に置き換え*とを。 - すべてのサブパッケージを分析する "

+0

私の不満と狂暴な検索では、私は実際にはRTFMにならないように管理しました。ありがとう! –