java自定义findbugs规则_findbugs自定义规则并配置实现检测

本文详细介绍了如何在Java中自定义FindBugs规则,包括创建ForbidSystemOutClass检测器,编写findbugs.xml和messages.xml配置文件,并通过Ant脚本进行编译配置。最终,自定义规则在FindBugs的plugin目录下生效,能够检测并报告System.out使用。然而,在Eclipse插件中配置自定义规则并使其生效仍存在问题。
摘要由CSDN通过智能技术生成

findbugs不过多介绍了,对于这个主题找了一些资料,没有找到一个完整的介绍,要么是介绍怎么写detector,要么就是没有完整的介绍怎么配置生效,下面主要介绍一下怎么配置其生效,至于怎么写这个detector还是有很多资料说明的,不过在些也重复一下。

一、自定义detector

1 ForbidSystemOutClass检测类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.test.findbugs;importorg.apache.bcel.classfile.Code;importedu.umd.cs.findbugs.BugInstance;importedu.umd.cs.findbugs.BugReporter;importedu.umd.cs.findbugs.bcel.OpcodeStackDetector;public class ForbidSystemOutClass extendsOpcodeStackDetector {privateBugReporter bugReporter;publicForbidSystemOutClass(BugReporter bugReporter) {this.bugReporter =bugReporter;

}

@Overridepublic voidvisit(Code obj) {super.visit(obj);

}

@Overridepublic void sawOpcode(intseen) {if (seen ==GETSTATIC) {if ("java/lang/System".equals(getClassConstantOperand())&& ("out".equals(getNameConstantOperand()) || "error".equals(getNameConstantOperand()))) {

bugReporter.reportBug(new BugInstance("SYSTEM_OUT_ERROR", HIGH_PRIORITY)

.addClassAndMethod(this).addSourceLine(this));

}

}

}

}

View Code

参考:http://blog.csdn.net/franklies/article/details/6830534

https://www.ibm.com/developerworks/cn/java/j-findbug2/

至于里面的一些相关逻辑不在此探讨之内;

2 findbugs.xml

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

View Code

3 messages.xml

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

detector decription]]>

short decription

long decription

System.out can't be released, you must delete it.]]>

System.out can't allow

View Code

参考:http://www.warski.org/staticaccess.html,这两个xml文件直接是从这个开源工程里面拿出来修改的

自定义检测规则主要有这三个步骤,写完这三个,剩下的工作就是编译配置;

二、编译配置

主要是编写ant脚本

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

Builds the Systemout Checker.

View Code

使用ant命令:

ant dist

编译过程如下:

9609a36c7ed6768682c063c3121d0934.png

在ant配置脚本中已经默认把生成的testFindBugs.jar包放到findbugs安装目录里面的plugin中,对于自定义的规则,打成jar包后,放在这个plugin目录就会自动生效,而不是像网上介绍的那样放在findbugs.jar包中。

三、检测

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

Builds the Systemout Checker.

View Code

使用ant命令:

ant findbugs

过程如下:

ec2f13b66e8cb898c3cd0e58b28f8ce2.png

ok了,可以在工程的bin目录下,看到findbugs检测生成的结果findbugs_result.xml文件,至此整个过程结束,以上只上讲解了一个配置及过程,至于findbugs规则的具体编写以及findbugs.xml、message.xml里面的每个符号代表的意思没有涉及,向findbugs迈出了一步,接下来还是需要更多的时间摸索。

另外怎么在eclipse的插件中配置自定义的规则还是个问题,试过,可以把规则加进来,但检测的时候却没有生效,目前还没有找到原因。

附上demo:

b200ba9b925b939a39f0cd65b15eee81.png

右键保存这张图片到本地,然后把扩展名改成zip,解压就OK了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值