本文实现效果:当开发者commit代码时进行pmd静态代码检查,如果代码有问题就会终止commit并且报告错误内容
原理
1.git hooks文件夹中有个pre-commit文件,当执行“git commit”命令时git会执行此文件中的脚本,如果脚本以非0退出则会终止commit导致commit失败,因此可以在此文件中执行代码检查,当代码有问题时非0退出使无法提交。
注意:hooks中原始的pre-commit文件是pre-commit.sample,去掉.sample后文件才会生效
2.gradle中有pmd插件,配置此插件,利用此插件的task执行代码检查
涉及到的文件
1.pre-commit
#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments. The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-commit".
if git rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
echo "start pmd task"
SCRIPT_DIR=$(dirname "$0")
SCRIPT_ABS_PATH=`cd "$SCRIPT_DIR"; pwd`
$SCRIPT_ABS_PATH/../../gradlew -PcheckCommit="true" pmd
if [ $? -eq 0 ]; then
echo "pmd OK" //成功时的提示语,可修改
exit 0
else
echo "pmd fail, for details see /build/reports/pmd/pmd.html" //失败时的提示语,可修改
exit 1
fi
2.ruleset.xml
此文件中包含所有阿里规约,pmd执行代码检查时会依赖此文件中的规则进行检查
阿里规则获取方法(将多个文件合并到一个中)
- p3c/p3c-pmd/src/main/resources/rulesets/java at master · alibaba/p3c · GitHub
- 解压下一步中的p3c-pmd-x.x.x.jar
由于内容较多,此处不展示
3.阿里规约和pmd相关jar包
获取方法: