为不耐烦而更新:很简单,使用package.-
进行子包扫描,而不是package.*
,这是下面根据martoe的回答!
我似乎无法让onlyAnalyze
适用于我的多模块项目:无论我设置了哪种软件包(或模式),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,打包,安装,这将生成以下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
选项中使用两个通配符,但是生成了成功构建,但是遇到了findbugs错误(Dangling meta character '*'
等)。我尝试将
onlyAnalyze
设置为acme.*,acme.moo.*
,它分析了所有预期的类(acme.App
和acme.moo.App
),这意味着它“有效”,但未达到我的期望;即我必须为要分析的类显式声明所有父包:在多模块项目上可能变得很大且难以维护!我是否必须定义要分析的每个程序包,还是可以声明将执行我想要的工作的通配符/正则表达式模式?
我宁愿不使用包含/排除XML,因为这需要更多的设置和推理,而我目前没有时间...
最佳答案
引用Findbugs manual:“用.-替换。*以便分析所有子包”