引入
使用FindBug对项目的代码进行了检查
在这个链接了它讲解了FindBug的filter使用:
将相应的规则作成一份 XML 文档,然后,在配置页面中导入这份配置文档即可。
做一份xml
导入
再次运行FindBug,果然,不出所料,所有的scala 文件被排除了
扩展
1.过滤文件简介
从概念上讲,过滤器将针对一组条件的错误实例进行匹配。通过定义过滤器,您可以选择错误实例进行特殊处理; 例如,将其排除或包含在报告中。
过滤器文件是具有顶级元素的XML文档,FindBugsFilter其中有一些Match元素作为子元素。每个Match 元素表示一个应用于生成的bug实例的谓词。通常,将使用过滤器来排除错误实例。例如:
$ findbugs -textui -exclude myExcludeFilter.xml myApp.jar
但是,也可以使用筛选器来选择错误实例来专门报告:
$findbugs -textui -include myIncludeFilter.xml myApp.jar
Match元素包含子句,它们是谓词的连接词。换句话说,每个孩子必须对谓词是真实的。
2.匹配条款的类型
此元素指定要匹配的特定错误模式。该pattern属性是以逗号分隔的错误模式类型列表。您可以通过查看-xml 输出选项( 元素的type属性BugInstance)或错误描述文档生成的输出来查找特定警告的错误模式类型。
要进行更粗粒度的匹配,请使用code属性。它需要以逗号分隔的bug缩写列表。对于大多数粗粒匹配使用 categoryattriute,即需要bug目录名称的逗号分隔的列表: CORRECTNESS,MT_CORRECTNESS, BAD_PRACTICICE,PERFORMANCE,STYLE。
如果在同一元素上指定了上述多个属性,则将 匹配与指定模式名称或缩写或类别之一匹配的所有错误模式。
作为向后兼容的措施,并且 元件可以被用来代替 元素。其中每个都使用一个 name属性来指定接受的值列表。在将来的版本中可能会删除对这些元素的支持。
此元素匹配具有特定错误信心的警告。该value属性应为整数值:1表示高置信度警告,2表示匹配正常置信度警告,3表示匹配低置信度警告。在2.0.0版本中替换了。
相同,为了向后兼容而存在。
此元素匹配具有特定错误等级的警告。该value属性应该是1到20之间的整数值,其中1到4是最可怕的,5到9个可怕的,10到14个令人烦恼的,以及15到20个涉及错误的。
此元素匹配与使用nameattribute 指定的包中的类关联的警告。不包括嵌套包(沿着Java import语句行)。但是,使用正则表达式名称匹配可以轻松实现匹配多个包。
此元素匹配与特定类关联的警告。该 name属性用于指定类名的精确或正则表达式匹配模式。该role属性是类角色。
作为向后兼容性度量,您可以使用元素class上的属性Match来指定正确的类名称或classregex属性,以指定与类名称匹配的正则表达式,而不是此类型 的元素。
如果Match元素既不包含Class元素也不包含class/ classregex属性,则谓词将应用于所有类。这样的谓词可能会匹配比您想要的更多的bug实例,除非使用适当的方法或字段谓词进一步细化。
此元素匹配与特定源文件关联的警告。该 name属性用于指定源文件名的精确或正则表达式匹配模式。
此元素指定方法。的name用于指定对方法名的确切或正则表达式匹配的图案。该params属性是以逗号分隔的方法参数类型列表。该returns属性是方法的返回类型。该role属性是方法角色。在params和中returns,类名必须是完全限定的。(例如,“java.lang.String”而不仅仅是“String”。)如果指定了后一个属性之一,则创建方法签名需要另一个属性。请注意,您可以提供两种name属性或者params 与returns属性或他们三个。这样您就可以提供各种基于名称和签名的匹配。
该元素指定一个字段。该name属性用于指定字段名称的精确或正则表达式匹配模式。您还可以根据其签名 - 使用type属性过滤字段以指定字段的完全限定类型。您可以指定eiter或这两个属性以执行基于名称/签名的匹配。该role属性是字段角色。
这个元素指定一个局部变量。该name属性用于指定局部变量名称的精确或正则表达式匹配模式。局部变量是在方法中定义的变量。
该元素将Match子句合并为分离符。也就是说,您可以将两个 Method元素放在一个Or子句中以匹配任一方法。
这个元素结合Match了必须评估为真的子句。即,您可以在子句中放置 Bug和Confidence元素,And以便仅在给定的置信度下匹配特定的错误。
这个元素颠倒了包含的孩子Match。即,您可以Bug在Not子句中放置一个 元素,以匹配排除给定的一个错误。
3. Java元素名称匹配
如果name属性Class,Source, Method或Field用〜字符的属性内容的其余部分被解释为是对有问题的Java元素的名称相匹配的Java正则表达式开始。
请注意,该模式与整个元素名称匹配,因此需要在模式开始和/或结束时使用。*子句来执行子字符串匹配。
警告
Match子句只能匹配实际包含在bug实例中的信息。每个bug实例都有一个类,所以通常情况下,按类排除错误将起作用。
一些bug实例有两个(或更多)类。例如,DE(丢弃的异常)错误会报告包含发生已删除异常的方法的类以及表示已丢弃异常的类型的类。只有第一个(主要)类与Match子句匹配。因此,例如,如果要抑制类“com.foobar.A”和“com.foobar.B”的IC(初始化循环)报告,则可以使用两个Match子句:
Match>
Match>
通过明确地匹配两个类,确保无论在循环中涉及的哪个类恰好在bug实例中首先列出,都可以确保IC bug的实例匹配。(当然,这种方法可能会意外地压制包含“com.foobar.A”或“com.foobar.B”和第三类的循环。)
许多类型的错误报告了它们出现的方法。对于这些错误实例,可以将Method子句放在Match元素中,并且它们应该按预期工作。
5.例子
1.匹配课程的所有错误报告。
2.通过指定他们的缩写来匹配某个班级的某些考试。
3.通过指定缩写来匹配所有类别的某些测试。
4.通过指定类别来匹配所有类的某些测试。
5.通过它们的缩写匹配一个类的指定方法中的错误类型。
6.匹配特定方法中的特定错误模式。
7.以特定的方法将特定的错误模式与给定的优先级进行匹配。
8.匹配由AspectJ编译器引入的小错误(除非您是AspectJ开发人员,否则您可能对这些错误不感兴趣)。
9.在代码库的特定部分中匹配错误
10.使用特定签名匹配字段或方法上的错误
11.使用Not过滤器运算符来匹配错误
12.完全排除过滤器文件,以匹配从Groovy源文件生成的所有类。
6.完整的例子