pmd是一块开源的代码静态分析工具,使用java编写,可以自定义规则来进行自己想要的分析。pmd可以单独使用,也可以作为idea、eclipse的插件使用。它的规则分为xpath规则,和java规则。https://pmd.github.io/

pmd内部工作机制比较简单,大概分为以下几个主要步骤。

1、使用是通过dir参数指定要分析的源码目录,pmd会将要分析的源码文件全部解析成抽象语法树。

2、遍历每一个文件,为每个文件的分析创建一个线程对象pmdrunable放到线程池。

3、针对每个文件根据文件类型,应用指定的规则集里每一条规则。

4、规则里可以根据自己关心的语法树节点类型进行分析处理,比较方便的是支持xpath的方式进行节点查找。

。。。。

不足之处:

pmd将每个文件独立进行规则匹配,无法做到跨文件的关联分析,或者跨文件的数据流跟踪。

pmd目前主要支持的语言就是java,其他的还有xml、js、velocity模版。一些比较流行的语言比如 PHP go 等是不支持的。

改进思路:

在进行规则匹配之前加入预处理功能,把所有文件进行预处理分析,比如每个类对其他类的方法的调用关系,将分析结果放到context里,后边的规则可以取出来用。

idea插件,pmd的idea插件目前还有些问题,不能满足需求,可能需要自己重新开发了。

安装后路径在

/Users/fsq/Library/Application Support/IdeaIC2017.2/PMD-Intellij/    mac

C:\Users\Administrator\.IdeaIC2017.3\system\plugins\PMD-Intellij\   windows

源码地址 https://github.com/amitdev/PMD-Intellij  ,自定义的规则,打包到jar文件后放在这个目录,重启idea即可生效。

自定义规则:

pmd将不同的规则放在不同的模块中,比如java的规则在 pmd-java模块中,如果想实现自己的java规则可以将自己的规则放在 pmd-java 模块的代码中,并配置到对应的 xml规则集里,然后将 pmd-java模块重新打包成jar文件,替换掉pmd中的 pmd-java的jar包即可。

其他的再补充吧。

pmd 使用笔记的更多相关文章

  1. SequoiaDB 笔记

    SequoiaDB 笔记 这几天翻了翻SequoiaDB的代码,记了点笔记.不保证下面内容的正确性(肯定有错的地方) 个人观感 优点 代码还不错,设计也算简洁. EDU和CB的使用让整个系统变得简单很 ...

  2. 【转载】linux内核笔记之进程地址空间

    原文:linux内核笔记之进程地址空间 进程的地址空间由允许进程使用的全部线性地址组成,在32位系统中为0~3GB,每个进程看到的线性地址集合是不同的. 内核通过线性区的资源(数据结构)来表示线性地址 ...

  3. 代码静态分析工具--PMD,Findbugs,CheckStyle

    最近学习Mybatis的官方文档,看到了[项目文档]一节有很多内容没有见过,做个笔记,理解一下. PMD 扫描Java源代码,查找潜在的问题,如: 可能的bugs,如空的try/catch/final ...

  4. 【读书笔记】《Computer Organization and Design: The Hardware/Software Interface》(1)

    笔记前言: <Computer Organization and Design: The Hardware/Software Interface>,中文译名,<计算机组成与设计:硬件 ...

  5. JVM 学习笔记一 :JVM类加载机制

    前言: 最近在看JVM相关资料,这里记录下学习笔记,希望自己能坚持学完,打牢基础.   一.类加载过程 1,类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载.验证.准备.解析.初始化.使用 ...

  6. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  7. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  8. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  9. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

随机推荐

  1. curl 重定向问题

    今天在curl一个网站的时候遇到一个奇怪的问题,下面是输出: lxg@lxg-X240:~$ curl -L http://www.yngs.gov.cn/ -v * Hostname was NOT ...

  2. RHEL 5.4下部署LVS(DR)+keepalived实现高性能高可用负载均衡(转)

    一.简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一. ...

  3. linux 使用fdisk分区扩容,看介绍命令(未完)

    https://www.cnblogs.com/chenmh/p/5096592.html LVM 逻辑磁盘的一些命令 http://man.linuxde.net/vgcreate

  4. QT学习二:工具栏

    QT  的工具栏提供 Dock 功能.文字/图标显示排列的功能. void MainWindow::createToolBar(void) { QToolBar *toolBar = new QToo ...

  5. LINQ操作数组(交集,并集,差集,最值,平均,去重复)

    数组是大学里经常拿来做算法练习的对象.一些经典算法非常有价值,考试.装逼.面试都十分有用.但现在是效率时代,编程讲究生产效率,利用LINQ,可以让程序猿避免写一些基本算法,把精力花在业务处理上. 下面 ...

  6. Python内置函数之callable()

    callable()用来检测对象是否可调用的. callable()返回值为True或者False. 下面看看例子 : >>> callable() False >>&g ...

  7. iOS 音频开发

      音频基础知识 组成 音频文件的组成:文件格式(或者音频容器) + 数据格式(或者音频编码). 文件格式(或音频容器)是用于形容文件本身的格式. 我们可以通过多种不同的方法为真正的音频数据编码.例如 ...

  8. SharePoint管理中心配置内容数据库

    SharePoint管理中心配置内容数据库         在SharePoint2010中,内容数据库是组织数据的核心. 是全部站点内容信息,如文档.列表数据和Web部件属性等存储的地方.默认地,内 ...

  9. centos6.5下Nginx的安装

    此处主要介绍通过配置Nginx的官方yum源,通过yum安装Nginx.参考官网:http://nginx.org/en/linux_packages.html 主要分为以下步骤: 1.配置yum源: ...

  10. FineReport实现java报表多级上报的效果图

    Java报表-上报流程管理 Java报表-上报任务管理 Java报表-我的上报任务 Java报表-系统说明