1用Eclipse自带插件创建findbugs的检测器1.准备工作1.1.为Eclipse安装插件插件1:ByteCode下载地址:用法:在Eclipse菜单栏上单击windows-showview-other…-Java-Bytecode即可打开Bytecode窗口,方便查看当前文件的字节码,效果如图1所示。图1插件2:Findbugs下载地址:用法:在Eclipse菜单栏上单击windows-showview-other…-Findbugs-BugExplorer即可打开BugExplorer窗口,进入Findbugs浏览状态,效果如图2所示。2图21.2.以下操作需要用的软件(可选)为了操作方便,建议使用winRAR用来打开jar文件;使用Notepad++打开xml文件2.创建自己的Findbugs检测器2.1.编写自定义的检测器Detector项目中需要引入Findbugs的jar文件:findbugs.jar自定义的检测器需要继承OpcodeStackDetector,重写其sawOpcode方法。下面这个检查器Detector用来查找项目中有没有System.out和System.error情况出现。packageedu.umd.cs.findbugs.detect;importorg.apache.bcel.classfile.Code;importedu.umd.cs.findbugs.BugInstance;importedu.umd.cs.findbugs.BugReporter;importedu.umd.cs.findbugs.bcel.OpcodeStackDetector;/***@author判断System.out和System.error这种情况*/publicclassForbiddenSystemOutClassextendsOpcodeStackDetector{BugReporterbugReporter;3publicForbiddenSystemOutClass(BugReporterbugReporter){this.bugReporter=bugReporter;}/***visit方法,在每次进入字节码方法的时候调用在每次进入新方法的时候清空标志位*/@Overridepublicvoidvisit(Codeobj){super.visit(obj);}/***每扫描一条字节码就会进入sawOpcode方法**@paramseen字节码的枚举值*/@OverridepublicvoidsawOpcode(intseen){if(seen==GETSTATIC){if(getClassConstantOperand().equals(java/lang/System)//getclassmapping&&(getNameConstantOperand().equals(out)//getstaticfieldmapping||getNameConstantOperand().equals(err))){BugInstancebug=newBugInstance(this,CHECK_SYSTEMCLASS,NORMAL_PRIORITY).addClassAndMethod(this).addSourceLine(this,getPC());bug.addInt(getPC());bugReporter.reportBug(bug);}}}}文件1:自定义检测器ForbiddenSystemOutClass.java接下来找到Eclipse编译的ForbiddenSystemOutClass.class文件,一般在项目的lib目录里可以找到。将其放入findbugs-plugin.jar文件中对应的目录下。2.2.修改findbugs.xml文件找到Eclipse插件安装文件夹中findbugs-plugin.jar所在的文件夹,我的文件夹是F:\eclipse\plugins\edu.umd.cs.findbugs.plugin.eclipse_2.0.0.20111221双击打开findbugs-plugin.jar文件,找到其中的findbugs.xml和messages.xml两个文件,如图3所示。4双击打开findbugs.xml,你可以修改原有的文件,也可以替换原有的文件为自己写的findbugs.xml。图3主要有两点:1.BugPattern注意Experimental的大小写2.Detector.FindbugsPluginBugPatternabbrev=SUtype=CHECK_SYSTEMCLASScategory=Experimental/Detectorclass=edu.umd.cs.findbugs.detect.ForbiddenSystemOutClassspeed=fastreports=CHECK_SYSTEMCLASShidden=false//FindbugsPlugin文件2:findbugs.xml2.3.修改messages.xml文件主要有三点:1.BugPattern注意Experimental的大小写2.Detector.3.BugCode?xmlversion=1.0encoding=UTF-8?MessageCollectionPluginShortDescriptionDefaultFindBugsplugin/ShortDescriptionDetails5![CDATA[pThisplugincontainsallofthestandardFindBugsdetectors./p]]/Details/PluginDetectorclass=edu.umd.cs.findbugs.detect.ForbiddenSystemOutClassDetails![CDATA[pChecksforclassesusedSystemclass./p]]/Details/DetectorBugPatterntype=CHECK_SYSTEMCLASSShortDescriptionSystem.outorSystem.errused/ShortDescriptionLongDescriptionchecksmethod.Changestologgerifneeded./LongDescriptionDetails![CDATA[psystemclassused./p]]/Details/BugPatternBugCodeabbrev=SUSystemclassused/BugCode/MessageCollection文件3:messages...xml3.运行放置好这三个文件,重启Eclipse,在需要检测的文件上单击右键,选择findbugs,如图4所示。6图4运行findbugs运行效果如图5所示:图4运行效果参考资料1.://hi.baidu.com/righttoleft/blog/item/d4f5a58b6847e6a30f244406.html