最近项目组要求使用PMD工具,通过自定义规则来检查代码,接录部分文档内容如下:

PMD介绍

PMD是一种开源分析Java代码错误的工具。与其他分析工具不同的是,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

你可以从PMD的网站下载PMD的二进制版本,或下载带源代码的版本,下载得到的都是ZIP文件。假设你下载了二进制版本,先把它解压缩到任意一个目录。接下来怎么做,就要看你准备怎么用它——最简单的,如果要在一个Java源代码目录中运行PMD,只需直接在命令行上运行下面的命令:

E:SoftWarepmd-bin-4.2.1pmd-4.2.1bin>java -jar ..libpmd-4.2.1.jar D:ebsser

viceebsservicesrc text rulesets/unusedcode.xml

输出结果类如:

D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMPolicyInput.java:

51Avoid unused private fields such as 'logger'.

D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMPolicyShow.java:2

5Avoid unused private fields such as 'logger'.

D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMQueryPolicyByPoli

cyNo.java:32Avoid unused local variables such as 'visaStatus'.

D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMQueryPolicyByPoli

cyNo.java:44Avoid unused local variables such as 'temp'.

D:ebsserviceebsservicesrccomsinosoftservicepolicyebseriskESMPolicyInpu

t.java:28Avoid unused private fields such as 'logger'.

D:ebsserviceebsservicesrccomsinosoftservicepolicyebsjriskJSMPolicyInpu

t.java:22Avoid unused private fields such as 'logger'.

一些可以加载必须参数前面或者后面的可选参数如下:

-debug:打印debug日志信息

-targetjdk:指定目标源代码的版本- 1.3, 1.4, 1.5, 1.6 or 1.7;

默认是1.5

-cpus:指定创建的线程数

-encoding:指定PMD检查的代码的编码方式

-excludemarker:指定PMD需要忽略的行的标记,默认为NOPMD

-shortnames:在报告中显示缩短的文件名

-linkprefix: HTML源文件的路径,只是为了HTML显示

-lineprefix:自定义的锚,用于影响源文件中的行,只是用于HTML显示

-minimumpriority:规则的优先级限制,低于优先级的规则将不被使用

-nojava:不检查java文件,默认是检查java文件

-jsp:检查JSP/JSF文件,默认不检查

-reportfile:将报告输出到文件,默认是打印在控制台

-benchmark:输出一个基准清单,默认输出到控制台

-xslt:覆盖默认的xslt

-auxclasspath:指定源代码文件使用的类路径

例如在windows系统中,例子如下:

c:> java -jar pmd-4.2.1.jar c:mysourcecode text unusedcode,imports -targetjd

k 1.5 -debug

c:> java -jar pmd-4.2.1.jar c:mysourcecode xml basic,design -encoding UTF-8

c:> java -jar pmd-4.2.1.jar c:mysourcecode html typeresolution -auxclasspath

commons-collections.jar;derby.jar

在Eclipse中PMD插件运行方式

PMD可以作为插件集成到很多的IDE中,很多的插件中都包含了PMD的jar文件,这个jar文件中包含了规则集。所以虽然一些插件中使用rulesets/unusedcode.xml来作为参数引用规则集,但是实际上是使用getResourceAsStream()方法来从PMD的jar文件中加载。

由于Eclipse是比较流行的开源Java/J2EE开发IDE,所以本文主要介绍如何在Eclipse中使用PMD工具进行代码的检查

安装基于IDE的插件

安装Eclipse的PMD插件的过程如下:

®启动Eclipse

®选择Help--&gtSoftware Updates--&gtFind and Install

®选择Next,选择New remote site

®在Name框中输入PMD,URL框中输入

®在之后的对话框中一直点击下一步或者接受协议,完成Eclipse的PMD插件的安装

也可以通过下载的zip文件按,然后执行上述过程,只是使用New locale site来代替New remote site,并使用下载的zip文件。

可以通过Windows--&gtPreferences来配置PMD。

通过右键一个,然后选择PMD--&gtCheck node with PMD,即可使用PMD工具检查代码。如果要进行重复代码检测,那么右键一个项目后,选择PMD--&gtFind suspect cut and paste。检查结果会放在reports目录下,文件名为cpd-report.txt。

可以通过使用Eclipse的帮助系统来查看PMD插件的文档。

在安装完更新后,如果发生了一个异常,例如”java.lang.RuntimeException: Could not find that class xxxx”,这时试着删除workspace中的.metadata/plugins/net.sourceforge.pmd.eclipse目录下的ruleset.xml文件。

使用PMD

1、启动Eclipse IDE,打开工程,选择"Windows"->"Preferences"下的PMD项,其中Rules Configuration项目可以配置PMD的检查规则,自定义检查规则也可以在此通过Import的方式导入到PMD中

2、配置好后,鼠标右键点击工程中需要检查的JavaSource,选择"PMD"->"Check Code With PMD" ,之后PMD就会通过规则检查你的JavaSource了并且将信息显示在PMD自己的视图上

3、示例

import java.util.*;

public class Test {

public static void main(String[] args) {

try{

if(true) {}

System.out.println("Hello World!");

} catch(Exception e) {

}

}

}

以上代码PMD会检查出:catch块中没有内容、if判断块中没有内容、代码中出现System.out.println等警告描述

[@more@]DM

java静态代码检测 pmd,PMD使用与代码质量相关推荐

  1. “7th-place-solution-microsoft-malware-prediction”——kaggle微软恶意代码检测比赛第七名代码

    代码来源? 前言 阅读别的的优秀代码有助于提高自己的代码编写能力,从中我们不仅能学习到许多的编程知识,还能借鉴他人优秀的编程习惯,也能学习到别人独特的编程技巧.这篇博客是博主对微软2019恶意软件检测 ...

  2. python代码检测工具及区别_flake8-python代码质量检测工具

    flake8是python代码质量检测工具. 描述 flake8是一个命令行实用程序,用于在整个Python项目中加强样式的一致性. 默认情况下,它包括PyFlakes项目提供的lint检查,PyCo ...

  3. sonar做代码检测时如何忽略一些代码文件

    1.管理员登录sonar 2.如图 一条规则配置一个,不要填写逗号或者分号分割的多个规则

  4. [系统安全] 三十三.恶意代码检测(3)基于机器学习的恶意代码检测技术

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  5. [论文分享] 开源 C/C++静态软件缺陷检测工具实证研究

    前言 之前读了一遍这篇论文 开源 C/C++静态软件缺陷检测工具实证研究[1] [软件学报 2022] 属于静态软件分析与漏洞挖掘工具及技术的综述性文章, 今天总结一下 (其他的水话就不多说了, 就像 ...

  6. [网络安全提高篇] 一一五.Powershell恶意代码检测 (3)Token关键词自动提取

    "网络安全提高班"新的100篇文章即将开启,包括Web渗透.内网渗透.靶场搭建.CVE复现.攻击溯源.实战及CTF总结,它将更加聚焦,更加深入,也是作者的慢慢成长史.换专业确实挺难 ...

  7. jenkins学习系列之PMD静态代码检测

    一.jenkins集成PMD流程 实际生产中,上线的代码往往要经过检测,满足一些规则才行,这些规则可以是直接使用官方的规则,也可以是自己写的. 因为目前的工作和java有关,所以这里以java代码静态 ...

  8. pmd java规则_静态代码扫描 (一)——PMD 自定义规则入门

    阅读该文章前,最好已经对 PMD 有了初步的认识和了解,可参考静态分析工具 PMD 使用说明 准备工作 首先在PMD 官网下载最新版本的文件,目前最新版本是 5.4.1. 下载 pmd-bin-5.4 ...

  9. 静态代码检查工具-PMD

    静态代码检查工具-PMD 分类: 网络安全/ 工具使用/ 文章 提高代码的质量,除了要提高逻辑上的控制以及业务流程的理解外,代码本身也存在提高的空间,例如一些潜在的问题可以很早的就避免.类似于编码规范 ...

最新文章

  1. 如何用JavaScript操作form表单组件?
  2. create-react-app留言板
  3. java异常及日志注意事项
  4. 博野哪里学计算机呢,@博野大学生 2021年征兵开始了!
  5. vscode for mac怎样关闭自动更新
  6. cad快速看图需要替换的4个vip文件_看不懂施工图怎么办?20年老师傅教你看图技巧,学会受用一生...
  7. java httpserver 多个接口_多个Servlet之间数据共享实现方案
  8. 一段比较好的加1操作。能够防止简单的++造成的溢出。
  9. DevOps 能力提升模型
  10. float:left后,导航栏不左浮解决
  11. (转)Hibernate的优化方案
  12. 只卖了2000辆,竟扬言吊打特斯拉!贾跃亭昔日偶像,还在忽悠?
  13. 社群产品定位三种方式
  14. 基于SpringBoot+Mybatis+Thymeleaf的信息管理系统
  15. 华硕固件默认ip_斐讯刷华硕固件后开启QOS限速的方法
  16. web前端面试题(必背面试题)
  17. php机器人聊天对话框,PHP实现QQ聊天机器人
  18. 简单的CSS3动画案例——奔跑的熊哥
  19. 数据链路层(一、二)——差错控制
  20. 基本概念学习(7003)---网络流量

热门文章

  1. Linux之Httpd(Apache)服务详解
  2. 通信资料之IVR业务基础知识
  3. 详细到落泪的Tomcat安装教程....
  4. 读书笔记:《一分钟经理人 新版》
  5. MySQL恢复 利用innodb_force_recovery修复MySQL数据页损坏
  6. 晴天小猪历险记之Hill解题报告
  7. 一代经典销声匿迹:WinXP彻底再见了!
  8. js逆向-试客联盟登陆参数
  9. TLS/SSl相关的攻击漏洞及检测方法大杂烩!
  10. 如果面试遇到水货面试官,怎么办?