PMD:Java源代码扫描器
PMD是一个开源代码分析器。可以查找常见编程缺陷,比如未使用的变量、空catch代码块、不必要的对象创建等。支持Java、JavaScript、PLSQL、Apache Velocity、XML、XSL。
除此之外,PMD还包含CPD(拷贝、粘贴检测器)。CPD可以发现重复的Java、C、C++、C#、PHP、Ruby、Fortran、JavaScript、PLSQL、Apache Velocity、Ruby、Scala、Objective C、Matlab、Python、Go。
主要功能
与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在不运行Java程序的情况下报告错误。PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许多问题,例如:
- 潜在的bug:空的try/catch/finally/switch语句
- 未使用的代码:未使用的局部变量、参数、私有方法等
- 可选的代码:String/StringBuffer的滥用
- 复杂的表达式:不必须的if语句、可以使用while循环完成的for循环
- 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs
- 循环体创建新对象:尽量不要再for或while循环体内实例化一个新对象
- 资源关闭:Connect,Result,Statement等使用之后确保关闭掉
此外,用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。例如,你可以编写一个规则,要求PMD找出所有创建Thread和Socket对象的操作。
工作原理
PMD的核心是JavaCC解析器生成器。PMD结合运用JavaCC和EBNF(扩展巴科斯-诺尔范式,Extended Backus-Naur Formal)语法,再加上JJTree,把Java源代码解析成抽象语法树(AST,Abstract Syntax Tree)。
安装及PMD插件
PMD为各种IDE提供了安装插件:
- Maven PMD plugin
- Eclipse plugin
- NetBeans plugin
- JBuilder plugin
- JDeveloper plugin
- IntelliJ IDEA plugin
文档
官方文档介绍了从下载、安装、相关书籍、最佳实践、自定义规则等详细信息。
- 官方文档:https://pmd.github.io/pmd-5.4.0/index.html
- 相关开源项目及书籍:http://pmd.sourceforge.net/snapshot/overview/products.html
官方网站:https://pmd.github.io/
开源地址:https://github.com/pmd
PMD:Java源代码扫描器的更多相关文章
- 分治法解决合并排序(c++和Java源代码)
Java源代码 public class Mergesort1 { public static void merge(int[]a,int low,int mid,int high){//对两组已经排 ...
- java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器
java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...
- 全中国的省市县镇乡村数据获取以及展示java源代码
第一步.准备工作(数据源+工具): 数据源(截止目前最全面权威的官方数据):http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2013/ 爬取数据的工具 ...
- PowerDesigner(八)-面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)(转)
面向对象模型 面向对象模型是利用UML(统一建模语言)的图形来描述系统结构的模型,它从不同角度实现系统的工作状态.这些图形有助于用户,管理人员,系统分析人员,开发人员,测试人员和其他人员之间进行信息交 ...
- Android APK反编译得到Java源代码和资源文件
在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件. 一.反编译Apk得到Java源代码 首先要下载两个工具:dex2jar和JD- ...
- MyEclipse13中修改Servlet.java源代码
Servlet.java源代码想要修改的步骤,与低版本的不同废话少说,直接来步骤: 1,在myEclipse的安装目录中搜索com.genuitec.eclipse.wizards文件,如图:选择co ...
- 看java源代码
不会看JDK源代码,相当于没学过Java. 网上不容易找到一篇帮助我解决了如何在Eclipse下查看JDK源代码 的文章. 核心提示:在Eclipse中查看JDK类库的源代码!!! 设置: 1.点 w ...
- 混淆器:java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器
java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...
- [注意事项&车轮]java源代码 产生局部javadoc api档
随着Eclipse书写java码时间,有时候,因为我们不知道java函数返回.通过鼠标移动到java该功能,假设它javadoc相关内容将被显示. 但是,并非所有java代码javadoc:连装jav ...
随机推荐
- Map泛型集合-国家中文和英文的键值映射
package collection; import java.util.HashMap; import java.util.Map; public class Test5 { public stat ...
- hdu 1015 Safecracker 水题一枚
题目链接:HDU - 1015 === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Klein s ...
- 每天一个linux命令1之scp
不同的Linux之间copy文件常用有3种方法: 第一种就是ftp,也就是其中一台Linux安装ftpServer,这样可以另外一台使用ftp的client程序来进行文件的copy. 第二种方法就是采 ...
- 体验VisualStudio 2013中的内存分析功能
内存分析一直是个比较令人头痛的问题,Visual Studio 2013中就集成了一个内存分析的功能,可以方便我们进行分析内存的占用情况.本文将简单的介绍一下如何使用这个功能. 首先以一个简单的程序为 ...
- 【转】Ehcache详细解读
Ehcache 是现在最流行的纯Java开源缓存框架,配置简单.结构清晰.功能强大,最初知道它,是从Hibernate的缓存开始的.网上中文的EhCache材料 以简单介绍和配置方法居多,如果你有这方 ...
- Java虚拟机内存分配和回收策略
1 对象优先分配在Eden区 对象优先在Eden进行分配,大多数情况下,对象在新生代Eden区进行分配.当Eden区没有足够的空间进行分配时,虚拟机会发起一次Minor GC. 新生代GC(Ninor ...
- Jenkins 无法下载插件的解决办法
有时候在安装插件时可能会出现下图的问题: 这应该是由于天朝的墙导致的,所以笔者就用了手动安装的方式 到https://wiki.jenkins-ci.org/display/JENKINS/Plugi ...
- Linux服务器安全登录设置
在日常运维工作中,对加固服务器的安全设置是一个机器重要的环境.比较推荐的做法是:1)严格限制ssh登陆(参考:Linux系统下的ssh使用(依据个人经验总结)): 修改ssh默认监听端口 ...
- urllib urllib2
#-*-coding:utf-8-*- import urllib import urllib2 import cookielib ##urllib url="http://www.qq.c ...
- Oracle 日期总结
一.带星期格式 .SELECT to_char(to_date('2014-12-12','yyyy-mm-dd'),'MM-DD (DAY)') FROM DUAL .SELECT to_char( ...