アップデートとして機能していない:それは簡単です、代わりに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.App
とacme.moo.App
と何もelを評価すると仮定したacme.*
に設定されている "onlyAnalyze"オプションがあるので、findbugsによって評価されないということですse。
私は今、テスト、構築、きれいにmvn clean install
を実行する実行のFindBugs、パッケージ、インストール、(簡略化のために切り取ら)以下の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 '*'
など)とを生成します。
私はそれを「作品」という意味ではなく、私は期待して期待されるすべてのクラス(acme.App
とacme.moo.App
)を解析acme.*,acme.moo.*
からonlyAnalyze
設定してみました。つまり、分析したいクラスの親パッケージを明示的に宣言する必要があります。これは、マルチモジュールプロジェクトでは大規模で保守が難しくなる可能性があります。
解析したいすべてのパッケージを定義する必要がありますか、あるいは私がしたいと思うワイルドカード/正規表現のパターンを宣言できますか?
それは私は現在のために...
私の不満と狂暴な検索では、私は実際にはRTFMにならないように管理しました。ありがとう! –