1. 获取P3C-PMD

(1) 下载源码

源码地址:https://github.com/alibaba/p3c

p3c-pmd-2.1.1-jar.zip:

https://pan.baidu.com/s/1VSXmP84v0OXvcsQ4Jdxxug?pwd=r4cl 提取码: r4cl 

(2) 打包

源码下载后,解压,进入p3c-pmd子项目,执行Maven命令:mvn clean package进行打包(或者导入开发工具通过工具打包)。

(3) 把打好的包(p3c-pmd-2.1.1-jar-with-dependencies.jar)拷贝到gitlab hooks脚本可以引用到的路径下,比如我这里拷贝到gitlab的安装目录下:/var/opt/gitlab/git-hooks(我的gitlab是通过docker方式安装的,该目录映射到了宿主机)。

2. 创建hooks

2.1 选择目标项目

在gitlab中,项目目录是经过hash的,所以我们首先要找到目标项目的hash目录。

(1)进入项目列表。

(2)点击列表中的项目名称,进入项目详情页面,找到“Gitaly相对路径”即是。

(3)进入目录

我的gitlab是通过docker方式安装的,已映射到宿主机。

2.2 创建hooks

在项目目录下创建custom_hooks/pre-receive.d目录,并在pre-receive.d目录下创建pre-receive文件(注意:不需要扩展名)。

pre-receive文件内容如下(无需重启gitlab即可生效):

#!/bin/bash# oldrev,旧版本号;newrev,新版本号;committer,当前提交代码的用户;REJECT=0,正常export JAVA_HOME=/var/opt/gitlab/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH# 命令结果状态
REJECT=0
# 代码检测库
PMD_LIB=/var/opt/gitlab/git-hooks/p3c-pmd-2.1.1-jar-with-dependencies.jar
# 检测结果国际化语言:en、zh
PMD_LANGUAGE=zh
# 文件字符编码
FILE_ENCODING=utf-8echo "开始进行代码质量检测..."while read oldrev newrev refname; doif [ "$oldrev" = "0000000000000000000000000000000000000000" ];thenoldrev="${newrev}^"ficommitter=`git log -1 $newrev --pretty=%ce`files=`git diff --name-only ${oldrev} ${newrev}  | grep -e ".java$"`echo $committerif [ -n "$files" ]; thenTEMPDIR="tmp"for file in ${files}; domkdir -p "${TEMPDIR}/`dirname ${file}`" > /dev/nullgit show $newrev:$file > ${TEMPDIR}/${file}done;java -Dfile.encoding=$FILE_ENCODING -Dpmd.language=$PMD_LANGUAGE -cp $PMD_LIB net.sourceforge.pmd.PMD -d $TEMPDIR -R rulesets/java/ali-comment.xml,rulesets/java/ali-concurrent.xml,rulesets/java/ali-constant.xml,rulesets/java/ali-exception.xml,rulesets/java/ali-flowcontrol.xml,rulesets/java/ali-naming.xml,rulesets/java/ali-oop.xml,rulesets/java/ali-orm.xml,rulesets/java/ali-other.xml,rulesets/java/ali-set.xml -f text -shortnamesREJECT=$?echo "reject = "$REJECTif [ $REJECT = 0 ] ;thenecho "码出高效!您的代码通过阿里巴巴Java开发规范(黄山版)检测!"elif [ $committer = 'super@domain.com' ]; thenecho "特殊情况,特殊处理!"REJECT=0else  echo  "在您的代码中发现了瑕疵,请及时修复,然后再提交!(代码规范请参考:https://github.com/alibaba/p3c)"firm -rf $TEMPDIRfi
doneexit $REJECT

授权:

  • chown -R git:root  custom_hooks/pre-receive.d
  • chmod 774 custom_hooks/pre-receive.d/pre-receive

这样,开发者每次push代码到该项目的仓库上时,gitlab都会执行该hooks脚本,如果不通过,会被gitlab拒绝push。

说明:

我这里通过docker安装的gitlab容器内没有JDK,映射了宿主机的JDK;

把chown命令中的git:root(用户/用户组)换成自己的;

chmod命令把pre-receive文件授予用户/用户组读、写、执行权限。

3. 使用

在目标项目上,编写不符合规范的代码

然后push,结果如下图:

Gitlab集成阿里巴巴P3C-PMD代码质量检测插件相关推荐

  1. java lint_Java代码规范与质量检测插件SonarLint

    1.  SonarLint SonarLint是一个代码质量检测插件,可以帮助我们检测出代码中的坏味道 下载与安装 在需要检测的单个文件或者单个项目上右键 --> Analyze --> ...

  2. Java代码规范与质量检测插件SonarLint

    1.  SonarLint SonarLint是一个代码质量检测插件,可以帮助我们检测出代码中的坏味道 下载与安装 在需要检测的单个文件或者单个项目上右键 --> Analyze --> ...

  3. 代码质量检测(jacoco pmd pipeline)

    代码质量检测 一.静态代码分析 静态代码分析是指在不运行程序的前提下,对源代码进行分析或检查,范围包括代码风格.可能出现的空指针.代码块大小.重复的代码等. pipeline中,静态代码分析通常被安排 ...

  4. 代码质量检测-SonarQube

    文章目录 前言 一.SonarQube是什么? 二.SonarQube安装步骤 1.docker安装 2.docker-compose安装 3. 访问SonarQube 4. 配置SonarQube ...

  5. java检测工具_常用Java代码质量检测评估工具

    常用Java代码质量检测评估工具 1. PMD from http://pmd.sourceforge.net/ PMD能够扫描Java 源代码,查找类似以下的潜在问题: 可能的bug--try/ca ...

  6. 【IDEA】代码质量检测工具 QAPLug

    [IDEA]代码质量检测工具 QAPLug 代码质量检测工具 情景: 写完代码一定要别人review才发现bug或不好的语法或多余的变量是一件多么尴尬的事情,如果想在写代码时或者写代码后自己能发现问题 ...

  7. 代码质量检测平台架构设计

    「前言」 你是否清楚的了解自己的项目有多少个文件夹.多少个文件.多少行代码.多少个函数.多少个字符数? 你是否在项目中引入过代码质量检测相关的工具? 你是否在不同项目的切换中饱受indent=2还是i ...

  8. 皕杰报表之小程序代码质量检测

    最近在被云开发免费的份额,由于一些原因把小程序开发工具升级到了最新版本,新版本上传需要代码质量检测. 一.主包 其中按照官方说明需要提前知道的可优化项: 1. 代码包不包含插件大小超过 1.5 M [ ...

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

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

最新文章

  1. react控制组件的显示或隐藏, 根据state判断元素显示隐藏 , setState不实时生效解决方法
  2. 硬核干货:一位码农的架构师封神之路!
  3. TensorFlow object detection api------ssd_mobilenet使用
  4. 最强去马赛克AI来了,分分钟回到无马世界,连像素风《我的世界》人物都能复原...
  5. Android 中的编码与解码
  6. Android 网络编程之Http通信
  7. 第十六期:AWS 瘫痪:DNS 被 DDoS 攻击了 15 个小时
  8. 【HDU - 2093】 考试排名(排序+格式输出)
  9. Xcode工程添加第三方文件的详细分析 Create folder references for any added folders(转)
  10. 分别用Comparable和Comparator两个接口对下列四位同学的成绩做降序排序,如果成绩一样, 那在成绩排序的基础上按照年龄由小到大排序。 姓名(String
  11. 大数据“高烧不断”,“得数据者得天下”的关键在哪?
  12. C语言解释器的实现--让脚本跑起来(六)
  13. 8个优秀的CSS实践,再不刷题就晚了!
  14. LearnOpenGL 模型加载—Assimp
  15. html当前月份的英文,一月到十二月各个月份的英文缩写
  16. 每天15min-HTML5(10)-表单(上)
  17. 2022-4-28作业
  18. opus 编码和解码完整demo代码,opus和wav互转(js源码)
  19. 为什么越能干越忙碌越吃亏?这四点干货,说破职场微生态
  20. 三分钟下载好mysql-8.0.16

热门文章

  1. messageBox的入门学习
  2. 30岁程序员的转型思考
  3. Apache服务器访问权限设置
  4. TC358840XBG具有哪些特征
  5. 转换芯片-TC358775XBG:MIPI转LVDS(双路)芯片资料
  6. android 模拟器 haxm,Android模拟器不使用HAXM
  7. 触摸屏“G+G、G+P、G+F”是什么意思?
  8. SecureCRT8.3 软件及注册码
  9. 通过表结构生成数据库设计文档
  10. 多径效应(multiPath Effect)