不耐烦的更新:它很简单,使用package.-用于子包扫描而不是包.*,as-per martoe的答案如下!
我似乎无法仅仅为我的多模块项目工作:无论我设置了什么包(或模式),maven-findbugs-plugin都不会评估子包,因为我希望传递包名.*.
为了证明自己或插件有问题(虽然我总是认为它是前者!),我设置了一个具有以下结构的小型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.App和acme.moo .App而已.
我现在执行一个mvn clean install来清理,构建,测试,运行findbugs,package,install,这会生成以下findbugs报告(为了简洁起见)并导致构建失败,这是因为acme.App和acme.moo.应用程序:
<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选项中使用两个通配符但是这会产生一个成功的构建,但是有一个findbugs错误(悬空元字符’*’等).
我尝试将onlyAnalyze设置为acme.*,acme.moo.*,它分析了所有预期的类(acme.App和acme.moo.App),这意味着它“有效”,但并不像我期望的那样;即我必须为我想要分析的类显式声明所有父包:在多模块项目中可能会变得很大并且难以维护!
我是否必须定义我想要分析的每个包,或者我可以声明一个可以做我想要的通配符/正则表达式模式吗?
我宁愿不使用包含/排除XML,因为这需要更多的设置和推理,我目前没有时间…
解决方法
引用
Findbugs manual:“替换.*与.-同时分析所有子包”