せっかちな人のための更新:それは簡単です、以下のmartoeの答えのように、package.-
代わりにサブパッケージスキャンに使用してください!package.*
マルチモジュールプロジェクトで動作するようには見えません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構成があります。
<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つの明らかな違反がある次のコードがあります。
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
と同じ内容ですが、評価されるacme.*
と想定している「onlyAnalyze」オプションが設定されているため、findbugsによって評価acme.App
されないことを期待していacme.moo.App
ます。
ここで、を実行しmvn clean install
て、findbugs、package、installをクリーンアップ、ビルド、テスト、実行します。これにより、次のfindbugsレポート(簡潔にするために省略)が生成され、ビルドが失敗することが予想されacme.App
ますacme.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>
<p> This field is never read.&nbsp; Consider removing it from the class.</p>
</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
オプションに2つのワイルドカードを使用してみましたが、ビルドは成功しましたが、findbugsエラー(Dangling meta character '*'
など)が発生しました。
期待されるすべてのクラス(および)を分析するonlyAnalyze
setを試してみました。これは、「機能する」ことを意味しますが、期待どおりではありません。つまり、分析したいクラスのすべての親パッケージを明示的に宣言する必要があります。これは、マルチモジュールプロジェクトで大きくなり、維持するのが困難になる可能性があります。acme.*,acme.moo.*
acme.App
acme.moo.App
分析したいすべてのパッケージを定義する必要がありますか、それとも私が望むことを実行するワイルドカード/正規表現パターンを宣言できますか?
包含/除外XMLを使用したくないのは、現在時間がないため、はるかに多くのセットアップと推論が必要になるためです...