PMD(http://pmd.sourceforge.net/)
简介:PMD扫描java源代码,查找潜在的问题,如:
可能的bugs,如空的try/catch/finally/switch声明
死亡的代码,没有使用的本地变量,参数和私有方法
不合标准的代码,如String/StringBuffer用法
过于复杂的表达式,如不必要的if表达式
重复的代码,拷贝、粘贴的代码
PMD的含义,如
Project Mess Detector
Project Monitoring Directives
Project Meets Deadline
Programming Mistake Detector…
用法:可以在命令行下执行,如
pmd c:\Test.java xml rulesets/unusedcode.xml
也可以使用IDE的插件,如Eclipse、IDEA、JBuilder、JCreator等等
这里主要介绍Ant里的调用,
下面是主要的Ant配置信息
自定义规则:
有两个办法来自定义规则,可以编写java类和编写XPath,编写java类的一般步骤是,先确定要查找的代码形式,利用PMD自带的designer.bat工具查看AST(抽象语法树),然后编写规则类(继承net.sourceforge.pmd.AbstractRule),然后编写一个ruleset的XML文件,最后就可以运行PMD进行检查。编写XPath比编写java类要容易些,但也需要掌握AST的含义,利用designer.bat工具可以查看AST,比如//ClassBody [count(//VariableDeclarator[../Type/Name[@Image='Logger']])>1],这个表达式就是查找类的代码里是否声明了多个Logger,然后编写一个ruleset的XML文件,最后运行PMD进行检查。这里是一个ruleset的XML文件的例子。
自定义规则集合:
PMD自带了很多代码规范的规则,还可以自定义规则,我们可以把这些规则整合到一起,按照我们的需求进行代码检查。
最后,我们运行PMD的时候就可以指定这个ruleset文件。
自带规则的介绍:
PMD自带了很多规则集合,并且分类写入不同的ruleset文件,如
Basic包含每人都必须遵守的代码最佳实践,如EmptyCatchBlock
Braces关于条件分支的规则,如IfStmtsMustUseBraces
Code Size关于代码大小的规则,如方法的长度,参数的长度,属性的个数等
Clone克隆实现的规则,如是否有super.clone()
Controversial一些有争议的规则,如UnnecessaryConstructor不必要的构造器
Coupling对象连接有关的规则
Design可以检查有问题的设计,如SwitchStmtsShouldHaveDefault
Finalizers使用finalizers时需遵循的规则,如FinalizeOnlyCallsSuperFinalize
Import Statements和import有关的规则,如DuplicateImports重复import
J2EE唯一规则UseProperClassLoader,class.getClassLoader()可能不正确,用
Thread.currentThread().getContextClassLoader()代替
Javabeans和javabean规范有关的规则,有BeanMembersShouldSerialize属性必须
序列化和MissingSerialVersionUID缺少序列化ID
JUnit Tests和JUnit测试有关的,如JUnitSpelling拼写检查等
Logging (Java)检查Logger的一些错误用法,如MoreThanOneLogger多个Logger
Logging (Jakarta)使用Jakarta Logger的一些规则,有UseCorrectExceptionLogging
异常处理不当和ProperLogger是否正确定义Logger
MigratingJDK版本移植的规则,如ReplaceVectorWithList用List代替Vector
Naming和命名有关的规则,名称太短或太长,命名的约定等
Optimizations优化性能的一些规则,如LocalVariableCouldBeFinal本地变量如果
只赋值一次,则应该声明为final
Strict Exceptions比较严格的异常处理方针,如AvoidCatchingThrowable
Strings使用String和StringBuffer时应遵守的规则,如StringToString
Sun Security编写安全的代码,有MethodReturnsInternalArray直接返回内部的数组,
更安全的做法是返回一个拷贝和ArrayIsStoredDirectly
Unused Code检查未使用的代码,如UnusedPrivateField未使用的私有属性
Java Server Pages编写jsp的一些方针,如NoLongScripts
Java Server Faces编写jsf的一些方针,有DontNestJsfInJstlIteration,在Jsf
里使用jstl的标签
PMD里面还有一个写好的ruleset文件,在pmd-3.8.jar里面的rulesets文件夹下,名称是favorites.xml,以下是主要部分:
其它事项:
1.可以使用JDK1.5的声明@SuppressWarnings(""),禁止PMD的警告。
2.可以使用//NOPMD来标记行或块代码,禁止PMD警告。
3.有两种方法自定义Rule,编写java类和编写XPath。
4.PMD提供了多种IDE的插件来运行PMD。
参考文档:
PMD官方文档(http://pmd.sourceforge.net/)
OnJava上一篇文档(http://www.onjava.com/pub/a/onjava/2003/04/09/pmd_rules.html)
代码静态分析(http://blog.donews.com/foxgem/archive/2005/04/23/347444.aspx)
分享到:
相关推荐
质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤其是企业应用软件系统来说,除了软件运行质量、文档质量以外,代码的质量也是非常重要的。软件开发进行到编码阶段的时候,最大的风险就在于如何保证...
PMD正是这样一种工具,可以直接使用它自带的规则(当然也可以使用自己的规则)对Java源程序进行分析找出程序存在的问题,可以很大程度上的减轻代码检查工作的繁琐,为项目组今后的维护和开发工作起到指导的作用。...
此文档包含了所有PMD规则的翻译包括解决方法
Eclipse代码分析工具使用PMD
Jenkins中FindBugs、PMD、CheckStyle和Violations静态分析工具安装配置详细介绍
PMD是一种开源分析Java代码的工具,通过静态分析获知代码错误,该工具可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等等
pmd-bin 静态代码分析工具 PMD是静态源代码分析器。 它发现常见的编程缺陷,例如未使用的变量,空的catch块,不必要的对象创建等。 它主要涉及Java和Apex,但支持其他六种语言。 PMD具有许多内置检查(以PMD术语,...
Java代码检查工具 PMD ,PMD是一款采用BSD协议发布的Java程序代码检查工具。该工具可以做到检查Java代码中是否含有未...
PMD工具使用说明中文版 非常好用的java检查代码的工具
目前市场上的 Java 静态代码分析工具种类繁多且各有千秋,我们项目调研现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),其中引入并集成了Checkstyle,FindBugs,PMD这三种静态代码工具。
PMD是一款采用BSD协议发布的Java程序代码检查工具。该工具可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。该软件功能强大,扫描效率高,是Java程序员debug的好帮手。 ...
java静态代码分析工具包括Checkstyle,FindBugs,PMD,Jtest
PMD是一款采用BSD协议发布的Java程序代码检查工具。该工具可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。该软件功能强大,扫描效率高,是Java程序员debug的好帮手。 ...
与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在不运行Java程序的情况下报告错误。PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许多问题,例如没有用到的变量、多余的...
pmd代码检查工具使用心得,自己从网上收集了一些资料结合自己的使用整理出来的一个文档,希望给大家带来一些帮助,pmd是个不错的代码检查工具
PMD使用,有兴趣的朋友可以下载PMD使用,有兴趣的朋友可以下载PMD使用,有兴趣的朋友可以下载PMD使用,有兴趣的朋友可以下载PMD使用,有兴趣的朋友可以下载PMD使用,有兴趣的朋友可以下载PMD使用,有兴趣的朋友可以...
自己整理的PMD检查的各个规则说明,其中打○的是我自己用的规则,大家自己按实际需要选择吧,有不对的地方请多多指教。
pmd插件使用文档
PMD集成到myeclipse的插件,里面含有pmd工具包,以及集成方式和pmd的规则说明文档。
java静态检查 pmd