`

PMD使用教程【转】

阅读更多

Tom Copeland 的 PMD 是一个开源(BSD 许可)工具,它分析 Java 源代码,找出潜在的 bug。在一般意义上来说,它与 FindBugs 和 Lint4j 这类工具类似。但是,所有这些工具找出的 bug 各不相同,所以在给定代码基址上把这些工具都运行一遍很有好处。您也可以把 PMD 与 Ant 集成在一起,以便进行自动源代码检查,而且还可以将 PMD 与一些可用于大多数主要 IDE 和程序员编辑器的插件集成在一起,本文介绍Eclipse IDE 下PMD的插件。

一、安装基于Eclipse IDE的插件

1、启动Eclipse IDE,打开工程

2、选择"Help"->"Software Updates"->"Find and Install"

3、点击"Next", 点击"New remote site"创建一个远程站点连接

4、输入此站点的描述名称,例如:“PMD Plus” ,然后输入安装地址"http://pmd.sf.net/eclipse",遵守协议,然后一路next,直至更新完毕重启Eclipse IDE

二、使用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等警告描述

三、关于PMD规则

1、PMD 包含 16 个规则集,涵盖了 Java 的各种常见问题,其中一些规则要比其他规则更有争议:

基本(rulesets/basic.xml)—— 规则的一个基本合集,可能大多数开发人员都不认同它: catch 块不该为空,无论何时重写 equals(),都要重写 hashCode(),等等。

命名(rulesets/naming.xml)—— 对标准 Java 命令规范的测试:变量名称不应太短;方法名称不应过长;类名称应当以小写字母开头;方法和字段名应当以小写字母开头,等等。

未使用的代码(rulesets/unusedcode.xml)—— 查找从未使用的私有字段和本地变量、执行不到的语句、从未调用的私有方法,等等。 设计(rulesets/design.xml)—— 检查各种设计良好的原则,例如: switch 语句应当有 default 块,应当避免深度嵌套的 if 块,不应当给参数重新赋值,不应该对 double 值进行相等比较。 导入语句(rulesets/imports.xml)—— 检查 import 语句的问题,比如同一个类被导入两次或者被导入 java.lang 的类中。 JUnit 测试(rulesets/junit.xml)—— 查找测试用例和测试方法的特定问题,例如方法名称的正确拼写,以及 suite() 方法是不是 static 和 public。 字符串(rulesets/string.xml)—— 找出处理字符串时遇到的常见问题,例如重复的字符串标量,调用 String 构造函数,对 String 变量调用 toString() 方法。 括号(rulesets/braces.xml)—— 检查 forifwhileelse 语句是否使用了括号。 代码尺寸(rulesets/codesize.xml)—— 测试过长的方法、有太多方法的类以及重构方面的类似问题。 Javabean(rulesets/javabeans.xml)—— 查看 JavaBean 组件是否违反 JavaBean 编码规范,比如没有序列化的 bean 类。 终结函数(finalizer)—— 因为在 Java 语言中, finalize() 方法不是那么普遍(我上次编写这个代码也经是好多年前的事了),所以它们的使用规则虽然很详细,但是人们对它们相对不是很熟悉。这类检查查找 finalize() 方法的各种问题,例如空的终结函数,调用其他方法的 finalize() 方法,对 finalize() 的显式调用,等等。 克隆(rulesets/clone.xml)—— 用于 clone() 方法的新规则。凡是重写 clone() 方法的类都必须实现 Cloneableclone() 方法应该调用 super.clone(),而 clone() 方法应该声明抛出 CloneNotSupportedException 异常,即使实际上没有抛出异常,也要如此。 耦合(rulesets/coupling.xml)—— 查找类之间过度耦合的迹象,比如导入内容太多;在超类型或接口就已经够用的时候使用子类的类型;类中的字段、变量和返回类型过多等。 严格的异常(rulesets/strictexception.xml)—— 针对异常的测试:不应该声明该方法而抛出 java.lang.Exception 异常,不应当将异常用于流控制,不应该捕获 Throwable,等等。 有争议的(rulesets/controversial.xml)—— PMD 的有些规则是有能力的 Java 程序员可以接受的。但还是有一些争议。这个规则集包含一些更有问题的检验,其中包括把 null 赋值给变量、方法中有多个返回点,以及从 sun 包导入等。 日志(rulesets/logging-java.xml)—— 查找 java.util.logging.Logger 的不当使用,包括非终状态(nonfinal)、非静态的记录器,以及在一个类中有多个记录器。

2、构建自己的规则集

2.1、导入规则集

<?xml version="1.0"?> <ruleset name="customruleset"> <description> Sample ruleset for developerWorks article </description> <rule ref="rulesets/design.xml"/> <rule ref="rulesets/naming.xml"/> <rule ref="rulesets/basic.xml"/> </ruleset>文件保存成为*.xml,通过Rules Configuration 的Import 导入到PMD中2.2、导入特定规则的规则集

 <?xml version="1.0"?>
<ruleset name="specific rules">
  <description>
  Sample ruleset for developerWorks article
  </description>
  <rule ref="rulesets/design.xml/AvoidReassigningParametersRule"/>
  <rule ref=
    "rulesets/design.xml/ConstructorCallsOverridableMethod"/>
  <rule ref="rulesets/design.xml/FinalFieldCouldBeStatic"/>
  <rule ref="rulesets/design.xml/DefaultLabelNotLastInSwitchStmt"/>
  <rule ref="rulesets/naming.xml/LongVariable"/>
  <rule ref="rulesets/naming.xml/ShortMethodName"/>
  <rule ref="rulesets/naming.xml/VariableNamingConventions"/>
  <rule ref="rulesets/naming.xml/MethodNamingConventions"/>
  <rule ref="rulesets/naming.xml/ClassNamingConventions"/>
  <rule ref="rulesets/basic.xml/EmptyCatchBlock"/>
  <rule ref="rulesets/basic.xml/EmptyFinallyBlock"/>
</ruleset>

文件保存成为*.xml,通过Rules Configuration 的Import 导入到PMD中

2.3、排除了设计规则的规则集

    可以把大多数规则包含在一个集合,但是不包括少数您不同意的或者会造成大量误报的特定规则。例如,XOM 在进行表查找的时候经常使用没有 default 块的 switch 语句。我可以保留大多数设计规则,但是可以在导入设计规则的规则元素中添加 <exclude name="SwitchStmtsShouldHaveDefault"/> 子元素,避开对遗漏 default 块的检查

<?xml version="1.0"?>
<ruleset name="dW rules">
  <description>
  Sample ruleset for developerWorks article
  </description>
  <rule ref="rulesets/design.xml">
    <exclude name="SwitchStmtsShouldHaveDefault"/>
  </rule>
</ruleset>

 

2.4、通过编写XPath表达式实现规则集

编写 XPath 表达式,它会针对每个 Java 类的抽象语法树进行处理,但是比较繁杂......

分享到:
评论

相关推荐

    idea plugin pmd

    描述中提到的博客链接可能提供了关于如何在IDEA中配置和使用PMD插件的详细教程。遗憾的是,由于当前无法访问该博客,无法提供具体的内容。通常,博主可能会分享如何配置PMD的规则,如何排除不想检查的代码,以及如何...

    Eclipse实用技巧教程

    - 使用PMD或FindBugs插件进行静态代码分析。 - 集成Eclipse Marketplace,轻松查找并安装更多有用插件。 总结,熟练掌握Eclipse的快捷键和实用技巧是提升开发效率的关键。通过个性化设置、有效管理项目和利用强大...

    mmd基础教程

    ### MMD基础教程详解 #### 一、MMD软件安装与基本操作 MMD(MikuMikuDance)是一款非常流行的3D动画制作软件,主要用于创作虚拟人物的舞蹈动作等场景。对于初学者而言,了解如何安装MMD以及基本的操作方法是至关...

    MMD 从零开始-艾米莉亚

    【标题】"MMD 从零开始-艾米莉亚" 涉及到的是一个与3D动画制作相关的教程,特别关注于MikuMikuDance(MMD)软件的使用,以及如何通过该软件创建以虚拟角色艾米莉亚为中心的3D动画。MMD是一个免费的3D动画软件,让...

    MMD模型动作以及音源

    模型文件一般以`.pmx`或`.pmd`格式存储。`.pmx`是较新的格式,支持更多功能,如多语言支持、UV图层和材料参数;而`.pmd`是早期格式,不包含所有`.pmx`的功能。模型文件包含了角色的身体、头发、服装等各个部分,用户...

    PMDEIDER[坑爹汉化]

    三、使用教程 1. **安装与启动**:首先,用户需要下载并解压PMDEIDER的压缩包,然后运行程序。由于是汉化版,界面语言为中文,易于理解和操作。 2. **加载模型**:在软件中选择“文件”-&gt;“打开”,导入需要修改的...

    不知火舞MMD模型

    同时,社区中也有许多教程和工具帮助用户更好地理解和使用MMD模型,提升作品质量。 总的来说,不知火舞MMD模型的发布不仅满足了粉丝对角色的热爱,也为3D动画创作爱好者提供了一个优质的素材,激发了他们的创新精神...

    #资源分享达人# 代码审计[java安全编程].doc.zip

    8. **代码审计工具**:介绍各种静态代码分析工具,如FindBugs、Checkstyle、PMD等,以及它们在检测安全问题上的应用。 9. **单元测试与集成测试**:编写测试用例以检测安全漏洞,确保代码的健壮性。 10. **持续...

    ETS:开发环境问题的存储库

    8. **代码质量检查**:静态代码分析工具如PMD、Checkstyle可以帮助发现潜在的代码质量问题。ETS可能指导如何配置和使用这些工具。 9. **构建自动化**:通过Ant或Maven自动化构建过程,ETS可能提供创建和运行构建...

    相干光通信综述

    这是因为数字相干接收器使得我们可以使用多种频谱效率较高的多级调制格式,并且能够在数字域内实现色散(GVD)和偏振模色散(PMD)的补偿等后处理功能。相干光通信技术的发展,不仅依赖于先进的光学、电子技术和理论...

Global site tag (gtag.js) - Google Analytics