我还在SpotBugs issue tracker上问过这个问题。
抱歉,仍在使用 FindBugs,但我们的积压中有一张升级到 SpotBugs 的票,据我了解,配置是相同的,我只需要更新groupId
,artifactId
和version
.
这是我的一块pom.xml
:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>${findbugs.version}</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<effort>Max</effort>
<threshold>High</threshold>
<xmlOutput>true</xmlOutput>
<failOnError>true</failOnError>
<excludeFilterFile>findbugs-filter.xml</excludeFilterFile>
<skip>false</skip>
<plugins>
<plugin>
<groupId>com.mebigfatguy.fb-contrib</groupId>
<artifactId>fb-contrib</artifactId>
<version>${fb-contrib.version}</version>
</plugin>
<plugin>
<groupId>com.h3xstream.findsecbugs</groupId>
<artifactId>findsecbugs-plugin</artifactId>
<version>${findsecbugs.version}</version>
</plugin>
</plugins>
</configuration>
</plugin>
我运行以下命令:
mvn verify
这会生成一个文件target/findbugsXML.xml
,其中包含BugInstances
如下所示:
<BugCollection sequence='0' release='' analysisTimestamp='1554129043559' version='3.0.1' timestamp='1554129041000'>
<BugInstance instanceOccurrenceNum='0' instanceHash='8dc725917956f30f9b8ab828a70d6420' rank='16' abbrev='Bx'
category='PERFORMANCE' priority='1' type='DM_BOXED_PRIMITIVE_TOSTRING' instanceOccurrenceMax='0'>
<ShortMessage>Method allocates a boxed primitive just to call toString</ShortMessage>
<LongMessage>Primitive boxed just to call toString in com.itextpdf.barcodes.Barcode128.setCode(String)
</LongMessage>
<Class classname='com.itextpdf.barcodes.Barcode128' primary='true'>
<SourceLine classname='com.itextpdf.barcodes.Barcode128' start='67' end='900'
sourcepath='com/itextpdf/barcodes/Barcode128.java' sourcefile='Barcode128.java'>
<Message>At Barcode128.java:[lines 67-900]</Message>
</SourceLine>
<Message>In class com.itextpdf.barcodes.Barcode128</Message>
</Class>
<Method isStatic='false' classname='com.itextpdf.barcodes.Barcode128' signature='(Ljava/lang/String;)V'
name='setCode' primary='true'>
<SourceLine endBytecode='579' classname='com.itextpdf.barcodes.Barcode128' start='682' end='718'
sourcepath='com/itextpdf/barcodes/Barcode128.java' sourcefile='Barcode128.java'
startBytecode='0'></SourceLine>
<Message>In method com.itextpdf.barcodes.Barcode128.setCode(String)</Message>
</Method>
<Method isStatic='false' role='METHOD_CALLED' classname='java.lang.Integer' signature='()Ljava/lang/String;'
name='toString'>
<SourceLine endBytecode='31' classname='java.lang.Integer' start='935' end='935'
sourcepath='java/lang/Integer.java' sourcefile='Integer.java' startBytecode='0'></SourceLine>
<Message>Called method Integer.toString()</Message>
</Method>
<Method isStatic='true' role='SHOULD_CALL' classname='java.lang.Integer' signature='(I)Ljava/lang/String;'
name='toString'>
<Message>Should call Integer.toString(int) instead</Message>
</Method>
<SourceLine endBytecode='135' classname='com.itextpdf.barcodes.Barcode128' start='699' end='699'
sourcepath='com/itextpdf/barcodes/Barcode128.java' sourcefile='Barcode128.java' startBytecode='135'
primary='true'>
<Message>At Barcode128.java:[line 699]</Message>
</SourceLine>
</BugInstance>
...
</BugCollection>
我想将此报告用作基线,以防止新的 Findbugs 错误蔓延,因此我想将此报告转换为excludeFilterFile
.
对于上面的代码片段,语法应该变成:
<FindBugsFilter>
<Match>
<Class name="com.itextpdf.barcodes.Barcode128" />
<Method name="setCode" params="java.lang.String" returns="void" />
<Bug pattern="DM_BOXED_PRIMITIVE_TOSTRING" />
</Match>
</FindBugsFilter>
根据这个 Stack Overflow 答案,我应该做的是:
- 运行构建以生成
target/findbugsXML.xml
(已经完成) - 跑
mvn findbugs:gui
- 加载
findbugsXml.xml
文件 - 选择警告的根节点(因为我想要所有警告)
- 将排除项保存到
findbugs-filter.xml
当我这样做时,我会得到一个findbugs-filter.xml
包含以下内容的文件:
<FindBugsFilter></FindBugsFilter>
那是一个空的过滤器文件。
那么我在这里做错了什么?生成过滤器文件的正确方法是什么?我希望我不必手动执行此操作,因为实际上有数百个警告。