
代码检测工具箱.doc
16页pmd-cpd代码检测工具箱—checkstyle、findbugs、目录一.目的:3二.取舍:3三.期望结果:3四.步骤:31. 准备工具32. 脚本规划42.1 checkout4脚本编写5执行5问题处理62.2 javac7脚本7执行72.3 jar8脚本86.3 checkstyle8脚本9变量定义9环境初始化脚本10执行10自定义规则102.4 findbugs13脚本13执行132.5 cpd14脚本14执行143. 完整脚本14目的:最近要跟踪一个项目的代码质量,保障项目质量个人总是认为,质量保障这个东西要用数据说话的代码走查是一个方面,但要能使用工具完成部分标准化的代码走查,发现部分错误,也不失为一种不错的补充手段结合之前自己用过、听过的几种开源工具,整合到一起,实现一个适合目前项目的简单工具二.取舍:首先是工具的选择,经过多个工具的使用结合目前项目组成员的水平和状态,决定从几个方面进行检查:常规bug编码规范重复代码不想检查太多,以前没有开展过这方面的工作,领导是否支持,项目成员反响是否良好都很难说,如果大家都喜欢再完善更多的检查也不晚其实还差一个依赖的检测,但现在项目使用的是ssh的架构,现有依赖检查的工具中,对spring的支持都不是很好,遂放弃。
对于工具的选择,紧着自己熟悉的就选择了checkstyle、findbugs和pmd的cpd工具三.期望结果:使用ant脚本,一步完成所有工作,针对项目直接产生检查报告四.步骤:1. 准备工具ant、checkstyle、findbugs、pmd下载还要下载cvs和eclipse,因为脚本中需要使用cvs更新代码,eclipse会让ant脚本的编辑和环境配置更加简单2. 脚本规划规划脚本,整个脚本分为几个部分,如下:vprojectname="myProject"default="start">
首先“变量定义”中定义变量,便于将来多个项目复用环境初始化”中初始化环境,所有环境清理和环境建立都在这里完成checkout”完成cvs的更新工作由于findbugs需要检查二进制代码,“javac”完成代码编译工作同样为findbugs需要,“jar”将代码打包checkstyle”完成代码拼写检查findbugs”完成bug检查“pmdcpd”使用pmd的cpd功能检查重复代码checkout变量定义和环境初始化部分,在需要时随时添加,首先是checkout过程,将代码检出startcvs库3.1脚本编写checkout部分脚本如下:
注意:上面脚本中依赖的mkDir任务是初始化部分的,为了建立相关的目录,后面有详细描述3.2执行eclipse中执行ant就是有这点好,缺少什么不用去修改环境变量,eclipse内部就解决了执行前有几个地方需要确认:脚本上点右键-》RunAs-》AntBuild…11^pECfitEcyaiHiE-"pioJdlr-vulue-^D:/warfr/guj]^p^i^A'EE/y=iuu""pHck<-3i"va.lu«a**9taxA:i&gi^EaM/poGlciagediE"v-al\ae-"(]peo^dlijizcdlr"百i■丄口■云*E-1pai=lc*-3adlr|txuiliidiE"val-je-"fIpactagrfacha=jEB^.^l-Bdix*vva.luv"■Crc■fi&dbdQ-5iiiTRTtilu.e—■5SprajdjEin.dbuQ'H.^ie-rb*vi!!u»""■TPcMxe"7-al'je—nfIpioJdlrSZce^pECfltECyrS.1]/^pECfieECy■^prc^zar&-YZihJIC-zihiie-|±LZ—F二口他闕次1:£卜・/>dir-'Sii-TPddir]"/>0彷亡].亡U亡cilelece
ClassPath定义依赖的类库,JRE用来定义JRE的版本,Environment标签很重要,可以定义一些环境变量中未定义的变量,这里我因为一直没有找到cvs路径,但命令行中能够找到cvs,所以把Path环境变量复制定义到这里了,如下图:脚本执行后,会将代码检出到工程目录下的“WorkingArea/Code/project”位置注意:环境变量和类路径等内容的设置在更改ant脚本名称后会丢失,需要重新设置3.3问题处理ant调用cvs网上文章较少,问题的处理就更少了,也许是太简单了吧,但我还是碰到了一些问题首先,如果path路径中没有增加cvs路径,或者你没有安装cvs(windows系统需要安装cvsnt),找不到cvs路径,将报错所以保证命令行中任意路径下调用"cvs”命令可以成功,如果还报错,可以将"path”环境变量增加到eclipse中另外,按照ant的cvs任务说明,cvs密码应该使用cvspass任务生成cvspass文件,在cvs任务中使用cvspass标签调用这个文件但是,我在eclipse中这么做不会产生文件,同时cvscheckout会报告访问被拒绝(很明白,没密码)。
处理办法就是将密码加在cvsroot属性中,在用户名后,“@”符号前增加“:密码”即可3. javacjavac任务将刚刚检出的代码进行编译,编译后的代码放到bin目录下4.1脚本javac部分的脚本如下:vtargetname="javac"depends="checkoutsrc">
4.2执行简单执行javac脚本可能会出现问题,需要使classpath包含类路径同样,脚本上右键-》RunAs-》AntBuild…打开窗口中选择Classpath页签,如下:这里要注意,1. 只有选择"UserEntries”节点时,添加jar包的按钮才有效不知道是不是我使用的问题,AddFolders添加目录后,并不能把目录下所有jar包都添加到类路径来,只能将所有jar包摊在这里编译后就是打包了,见下节4. jar与javac同样,由于findbugs的需要,将javac编译后的代码打包5.1脚本
