使用代码分析工具PMD检查Android Java代码缺陷
- 2020 年 3 月 16 日
- 笔记
1.背景
使用代码分析工具PMD检查Android Java代码缺陷,本文是个整理。
介绍
PMD是一个静态源代码分析器。它找到常见的编程缺陷,如未使用的变量,空的catch块,不必要的对象创建等等。它主要关注Java和Apex,但支持其他六种语言。 PMD具有许多内置检查(在PMD术语,规则中),这些检查在规则参考中针对每种语言进行了记录。我们还支持广泛的API来编写您自己的规则,您可以使用Java或作为自包含的XPath查询来执行。 在集成到构建过程中时,PMD最有用。然后,它可以用作质量门,以强制执行代码库的编码标准。除其他外,PMD可以运行:
- 作为Maven的目标
- 作为Ant任务
- 作为Gradle任务
- 从命令行
官网地址 https://pmd.github.io/pmd/index.html
命令行方式使用 PMD 的Demo https://github.com/vir56k/demo/tree/master/pmd/%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%96%B9%E5%BC%8F%E4%BD%BF%E7%94%A8pmd
Gradle 方式使用 PMD 的Demo https://github.com/vir56k/demo/tree/master/pmd/UsePMDByGradle
2.命令行方式使用 PMD
2.1 先了解使用手册
https://pmd.github.io/pmd/pmd_userdocs_installation.html#how-to-install-pmd-and-cpd
2.2 下载
前往官网,下载 压缩包,解压 下载地址 https://github.com/pmd/pmd/releases
2.3 执行检测的命令行格式
./run.sh pmd -d ../../../src/main/java/ -f text -R rulesets/java/basic.xml
2.4 我的脚本
# 准备环境信息 CUR=`PWD` echo 当前工作目录:${CUR} basepath=$(cd `dirname $0`; pwd) echo 当前执行的脚本文件的父目录:${basepath} PMD_HOME=$basepath/pmd-bin-6.12.0 echo PMD_HOME:${PMD_HOME} PROJ_DIR=$(cd ${basepath}; cd ../../; pwd) echo PROJ_DIR:${PROJ_DIR} SRC=${PROJ_DIR}/app/src/main/java FORMAT=html RULE=rulesets/java/basic.xml ${PMD_HOME}/bin/run.sh pmd -d ${SRC} -f ${FORMAT} -R ${RULE}
3.Gradle 方式使用 PMD
3.1 引用插件
apply plugin: 'pmd'
3.2 编写task
def configDir = "${project.rootDir}/scripts" def reportsDir = "${project.buildDir}/reports" task pmd(type: Pmd) { ignoreFailures = true ruleSetFiles = files("$configDir/pmd/pmd-ruleset.xml") ruleSets = [] source 'src' include '**/*.java' exclude '**/gen/**' reports { xml.enabled = false html.enabled = true xml { destination "$reportsDir/pmd/pmd.xml" } html { destination "$reportsDir/pmd/pmd.html" } } }
3.3 关联到 check task
check.dependsOn 'pmd'
3.4 执行 check
./gradlew check
查看报告
位于:build/reports/pmd 文件夹下

image.png
4. 参考
https://pmd.github.io/pmd/index.html