关于findbugs收集的网络资料信息
http://blog.csdn.net/lywybo/article/details/5335748
http://blog.csdn.net/z3h/article/details/1669311
http://findbugs.sourceforge.net/downloads.html
1.1 准备
下载 findbugs : http://sourceforge.net/projects/findbugs/files/findbugs/1.3.9/findbugs-1.3.9.zip/download
修改 build.xml , 去除所有的 validate 依赖。执行 ant 编译。
eclipse 引入 findbugs 工程 。
1.2 实现类
直接在 findbugs 目录中增加类
package edu.umd.cs.findbugs.detect;
import org.apache.bcel.classfile.Code;
import edu.umd.cs.findbugs.BugInstance;
import edu.umd.cs.findbugs.BugReporter;
import edu.umd.cs.findbugs.bcel.OpcodeStackDetector;
/**
* @author bo
* 这个规则 类用于判断 System.out 和 System.error 这种情况
*/
public class ForbiddenSystemClass extends OpcodeStackDetector {
BugReporter bugReporter ;
public ForbiddenSystemClass(BugReporter bugReporter) {
this . bugReporter = bugReporter;
}
/**
* visit 方法,在每次进入字节码方法的时候调用
* 在每次进入新方法的时候清空标志位
*/
@Override
public void visit (Code obj) {
super .visit(obj);
}
/**
* 每扫描一条字节码就会进入 sawOpcode 方法
*
* @param seen 字节码的枚举值
*/
@Override
public void sawOpcode ( int seen) {
if (seen == GETSTATIC ) {
if (getClassConstantOperand().equals( "java/lang/System" )
&& (getNameConstantOperand().equals( "out" ) || getNameConstantOperand().equals( "error" ))) {
BugInstance bug = new BugInstance( this , "ALP_SYSTEMCLASS" , NORMAL_PRIORITY ).addClassAndMethod( this )
.addSourceLine( this , getPC());
bug.addInt(getPC());
bugReporter .reportBug(bug);
}
}
}
}
1.3 修改 etc 目录配置文件 findbugs.xml 和 message.xml
不支持中文注释。
在 findbugs.xml 增加内容。
< Detector class = "edu.umd.cs.findbugs.detect.ForbiddenSystemClass"
speed = "fast"
reports = "ALP_SYSTEMCLASS"
hidden = "false" />
< BugPattern abbrev = "LIANGJZFORBIDDENSYSTEMCALSS" type = "ALP_SYSTEMCLASS" category = "EXPERIMENTAL" />
Message.xml 增加:
< Detector class = "edu.umd.cs.findbugs.detect.ForbiddenSystemClass" >
< Details >
<![CDATA[
<p>category:detector find System.out/System.error
<p>please use log4j
]]>
</ Details >
</ Detector >
< BugPattern type = "ALP_SYSTEMCLASS" >
< ShortDescription > short desc:System.out/error </ ShortDescription >
< LongDescription > class={0},method {1}long desc:System.out,please use log4j </ LongDescription >
< Details >
<![CDATA[
<p>detail info see log4j document</p>
]]>
</ Details >
</ BugPattern >
1.4 用 findbugs 图形化界面测试
点击 bin/finbugs.bat ,打开扫描的 .class 目录。看到扫描带 System.out 或者 System.error 的 .class 放到 experimental 类错误时,验证成功。
1.5 替换 eclipse findbugs-plugin.jar 文件
用 winrar 打开
D:\devtools\eclipse_3.5.1\plugins\edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821\findbugs-plugin.jar 中 message.xml,findbugs.xml,z 加入二进制的 edu.umd.cs.findbugs.detect .ForbiddenSystemClass 。
重启 elipse, 还需要确保 experimental 类的错误能在 findbugs 窗口展现: windows->preferences->java->findbugs->reporter configuration 上的 experimental 选项勾上。
执行 findbugs 扫描 .class,看到结果出现..