forked from alibaba/p3c
-
Notifications
You must be signed in to change notification settings - Fork 0
Home
haichaoyuan edited this page Sep 28, 2018
·
6 revisions
Welcome to the p3c wiki!
- pmd 项目, maven 构建
- 点击task里的 clean命令, package 命令,会在target文件下打出 jar包,直接使用
- install 命令,install 到 .m2 文件下
- gradle 项目,kotlin 语言
- ./gradlew clean buildDependents build, /build/distributions文件下
下载的pmd-bin-5.4.1【PMD可执行版本】
- bin
- designer.bat【界面工具,能将java源代码转化为AST(抽象语法树)】
- bgastviewer.bat【界面工具,与designer.bat功能相似】cpd.bat【用来查找重复代码的工具,命令行版】,Mac 只能使用这个,也好用
- cpdgui.bat【用来查找重复代码的工具,GUI版】
- pmd.bat【Window平台下运行PMD需要使用的文件】
- run.sh【Linux平台下运行PMD需要使用的文件】lib【该目录存放PMD运行依赖的jar包,包括第三方jar包和各种语言的模块jar包】
一些原先就有的规则,可以参考
- pmd-core【PMD的核心执行调度模块】
- pmd-java 【针对java语言的检测模块】
- src ->main
- rule 【该目录下存放已经编写好的java规则文件】
- basic【基础类规则】
- AvoidBranchingStatementAsLastInLoopRule.java【避免在循环的最后使用分支语句】
- AvoidMultipleUnaryOperatorsRule.java【避免一元运算符的多重使用】
- codesize【代码体积类规则】
- resources
- rulesets【java规则对应的xml文件】
- android.xml【PMD运行时使用该文件会调用安卓类规则进行扫描】
- basic.xml【PMD运行时使用该文件会调用基础类规则进行扫描】
注意: bat文件是window,mac 下使用sh文件,命令如下: ./run.sh bgastviewer
- 明确想要自定义的规则
- 列举会触发这种规则的所有不同的写法
- 使用 designer.bat 分析所有写法的抽象语法树的特定
- 编写规则代码捕捉这种特点
- 创建自己的xml规则文件,内容包括规则的相关信息
- 运行PMD 扫描错误代码,验证是否触发自定义规则
priority:优先级别,从高到低依次是1-Blocker(阻塞), 2-Critical(危险), 3-Urgent(紧急), 4-important, 5-Warning;
P3C-PMD插件基于PMD实现了《阿里巴巴Java开发手册》中涉及的48条规则。(49)
- 编程规约 (六)并发处理,实现了1、2、3、4、5、10、11、12等8条规则;
- 编程规约(五)集合处理,实现了4、5、6、7、9、11等6条规则;
- 编程规约(一)命名风格,实现了1、2、3、4、5、6、7、8、9、13等10条规则;
- 编程规约(二)常量定义,实现了1、2等2条规则;
- 编程规约(四)OOP规约,实现了5、6、7、8、9、12、17等7条规则;
- 编程规约(七)控制语句,实现了1、2、4等3条规则;
- 编程规约(八)注释规约,实现了1、2、3、4、5等5条规则;
- 编程规约(九)其他,实现了1、3、4、5等4条规则;
- 异常日志 (一)异常处理,实现了5、7、10等3条规则;
4 条跨文件规则
- 规则一: 禁止使用废弃的类和方法(deprecated)
- 规则二: 来自接口或者抽象类的重写方法必须标记 @Override 注解。区分肉眼不好区分的字母o和数字0,可识别方法签名改变
- 规则三: 静态方法和静态字段的外部使用,必须通过类来使用,而不是通过类的具体对象来使用
- 规则四: hashCode 和 equals 的使用方法需遵循以下准则:
- equals 方法被重写,hashCode 方法也需要被重写
- 继承 Set接口的类必须重写这两个方法,因为需要确保没有重复的对象被插入
- 当对象作为Map 的key 时,也需要重写这两个方法。(String 类就是重写这两个方法才能有幸作为Map 的Key)