阅读:5890回复:0
PMD使用java项目进行调用
pmd使用java
project进行调用 : 简介:PMD是源代码分析器。它找到常见的编程缺陷,如未使用的变量,空的catch块,不必要的对象创建等等。它支持Java,JavaScript,Salesforce.com Apex和Visualforce,PLSQL,Apache Velocity,XML,XSL 准备工作: 下载:pmd-bin-6.13.0(jar) 官网地址: https://pmd.github.io/ 向下翻找 下载:pmd-src-6.13.0(源码,可有可无) 从左到右依次三个选项:下载pmd-bin-6.13.0(jar) pmd-src-6.13.0(源码) pmd-doc-6.13.0(文档) 图片:XB[KN(J([_KTH(3V`E2R430.png 我本人只做了检测java代码的这块,所以以下就由java代码进行演示,但是细想是一样的,其他语言的可以进行举一反三 建立一个java project工程(PMDDemo) 然后将pmd-bin-6.13.0\lib的asm-7.1.jar,commons-io-2.6.jar,commons-lang3-3.8.1.jar,jcommander-1.72.jar,pmd-core-6.13.0.jar,pmd-java-6.13.0.jar 这六个包引入到项目中(其中pmd-java-6.13.0.jar这是pmd中的检测java的依赖包,其他语言请选择对应包),必须引入; 通过 右键项目(PMDDemo)> Build Path > Configure Build Path > Libraries > Add Libraries > User Libraries > User Libraries > new >输入你自定义jar存放的文件夹名称 如图 : 图片:UXDZK%]VB@`SKMSNGSMLQSV.png 图片:TZ574I8E33MCOUXXKQ[ZB0E.png 如此完成建立好了自定义的pmdjar文件夹,用来存放jar包 接下来:选择刚刚下载的pmd-bin-6.13.0 进入到lib目录,选择pmd-bin-6.13.0\lib的asm-7.1.jar,commons-io-2.6.jar,commons-lang3-3.8.1.jar,jcommander-1.72.jar,pmd-core-6.13.0.jar,pmd-java-6.13.0.jar (Ctrl+鼠标左键点击可以多选),进行添加然后点击 ok > Finish > ok 图: 图片:KF1QP2ZYU0LHJ9Z$7(W3R0E.png 结果: 图片:WEL`$TBNYO`_DZZEEMLH]O9.png 图片:7GH61K@LTNE(QDD6(QBH%2R.png 接下来就是代码时刻了:(这里的例子使用了官方的例子;地址:https://pmd.github.io/pmd-6.13.0/pmd_userdocs_extending_writing_pmd_rules.html) 首先:要知道我们要检测什么样的代码(PmdTest) 我们可以使用“While循环必须使用大括号”作为示例。在下面的源代码中,很容易在视觉上丢失 - 很难分辨花括号的属性。所以要检查静态扫描出这段代码没有{ }; 图片:BC)9GUXC}NG`02BKO`KL5E2.png 建立一个class (作用检测代码,也可以说是规则)(PmdDemoWhileLoops) 这里面主要使用了AST(抽象语法树),来进行树节点判断是否有{} 图片:CMT9RZWS(QR{2@OQ@LC`A~9.png 建立一个xml文件(用来调用检测代码);(PmdDemoWhileLoops.xml) 这个xml文件我文件主要用于调用你刚写好的规则类 name这个名字自定义,message触犯规则时的异常输出语句一定不要使用特殊字符否则会报错 比如“{ }”等;class:绑定刚才新建的java规则文件的地址,记得要是用此项目下的全路径;标签< description >里面添加描述;我暂时只是把它当做一个注释来看待;如果你们有更好的理解,请联系博主; 里面还有很多属性配置,这里就不一一介绍了(详细树配置请看官方文档地址:https://pmd.github.io/pmd-6.13.0/pmd_userdocs_extending_defining_properties.html) 图片:M5JDGN_EKX8G3TBB)BE{DBK.png 到处自定义规则算是写好了; 接下来运行试试:(测试运行类RunPmdRule) 图片:@E6%3SE5KYZ5T]LPO$[1GHQ.png 接下来你可以自己把测试源码(PmdTest.java)里面的while循环加上{}看一下什么效果; 本人第一次发表博客,如有侵权,请联系本人进行删除! 有错误点:请联系本人进行修改;大家多多包涵; |
|