IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 本地代码-gitlab-sonar一条龙(3)-[sonar-p3c-pmd] -> 正文阅读

[开发工具]本地代码-gitlab-sonar一条龙(3)-[sonar-p3c-pmd]

1、P3C-PMD

下载地址:

https://github.com/alibaba/p3c

编译:

<groupId>com.alibaba.p3c</groupId>
<artifactId>p3c-pmd</artifactId>
<version>2.1.1</version>

?mvn package 产生?p3c-pmd-2.1.1-jar-with-dependencies.jar

用命令测试一下,是否能检查代码:

java -cp p3c-pmd-2.1.1-jar-with-dependencies.jar net.sourceforge.pmd.PMD -d  ./  -R rulesets/java/ali-comment.xml

2、gitlab中设置pre-recive进行push前检查?

进入gitlab中某一个项目的路径:/var/opt/gitlab/git-data/repositories/@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.git/custom_hooks/pre-receive.d

?暂时先在目录下放p3c-pmd-2.1.1-jar-with-dependencies.jarpre-receive:

pre-receive脚本:

#!/bin/sh
#
# An example hook script to make use of push options.
# The example simply echoes all push options that start with 'echoback='
# and rejects all pushes when the "reject" push option is used.
#
# To enable this hook, rename this file to "pre-receive".
EJECT=0                 #REJECT变量,初始化为0

JAVA_HOME=/var/opt/gitlab/jdk18    #定义JAVA_HOME变量为当前jdk安装路径  /var/opt/gitlab/jdk18
BASE_PATH=$(cd `dirname $0`; pwd)     #BASE_PATH变量中为当前脚本存放的路径,比如当前脚本路径为/usr/local/script/shell.sh,则BASE_PATH=/usr/local/script/

while read oldrev newrev refname; do    #接收键盘输入的参数,空格分隔,分别赋值给oldrev, newrev, refname(推测这里oldrev,newrev为同一个代码仓库的两个分支名称)
    echo 'old version:'${oldrev}        #输出 oldrev
    echo 'new version:'${newrev}        #输出 newrev
    echo 'branc:'${refname}             #输出 refname

    if [ "$oldrev" = "0000000000000000000000000000000000000000" ];then  #如果oldrev的值是“00000000……”,那么将oldrev的值改成newrev拼接"^"的值
        oldrev="${newrev}^"
    fi

    FILES=`git diff --name-only ${oldrev} ${newrev}  | grep -e "\.java$"`    #执行git命令,找出oldrev分支和newrev分支中内容有差异的.java文件,将这些文件名放到FILES变量中

    if [ -n "$FILES" ]; then                                                #如果FILES变量有值,创建TEMPDIR变量,存放当前脚本路径所在目录地址加/tmp的字符串值
        TEMPDIR=$BASE_PATH/"tmp"
        for FILE in ${FILES}; do                                            #循环FILES列表,在TEMPDIR所指定的路径下,创建当前文件的父目录
            mkdir -p "${TEMPDIR}/`dirname ${FILE}`" >/dev/null              #例如FILE内容是/abc/de/fg/tt.java   TEMPDIR为/usr/local/script/tmp 则会创建/usr/local/script/tmp/abc/de/fg/目录
            git show $newrev:$FILE > ${TEMPDIR}/${FILE}                     #从git上将FILE文件的内容拷贝到TEMPDIR路径下
        done;

        FILES_TO_CHECK=`find $TEMPDIR -name '*.java'`                       #查找TEMPDIR路径下所有.java文件,将文件名放到FILES_TO_CHECK变量

        echo 'Check files:'${FILES_TO_CHECK}                                #输出FILES_TO_CHECK中的内容(TEMPDIR路径下左右java文件名)
        echo 'Aliyun p3c-pmd check starting.....'
        echo 'Current shell Path:' $BASE_PATH
        echo 'JAVA_HOME:' $JAVA_HOME
        echo 'Root directory for java sources: '$TEMPDIR


        # $JAVA_HOME/bin/java -Dpmd.language=en -cp $BASE_PATH/p3c-pmd-2.1.1.jar 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

         $JAVA_HOME/bin/java -Dpmd.language=en -cp $BASE_PATH/p3c-pmd-2.1.1-jar-with-dependencies.jar 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

        REJECT=$?                                                           #REJECT变量接收上面的java命令执行的结果返回值

        echo 'Aliyun p3c-pmd check end...'
        echo '返回值为: '$REJECT                                                     #输出返回值

        rm -rf $TEMPDIR                                                  #删除产生的临时文件
    fi
done

exit $REJECT                                                            #退出脚本程序,退出码为REJECT值

另一篇文章中的shell代码也可参考:https://my.oschina.net/u/3991747/blog/4254070

同时要使配置生效:

# gitlab-ctl reconfigure

push代码,出现拒绝提交:

3、eclipase插件

?

4、构建?sonar-p3c plugin插件

构建源码地址:

https://github.com/rhinoceros/sonar-p3c-pmd/

我选择的3.1.3分支,sonarque版本选的是

  • Community Edition
  • 版本 7.9.6?

?PMD是啥意思

一条校验规则对应分别对应3个配置文件:

1、pmd.properties (src\main\resources\org\sonar\l10n\)

2、rules.xml(src\main\resources\org\sonar\plugins\pmd\)

3、pmd-model.xml (src\main\resources\com\sonar\sqale\)

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:34:27  更:2021-11-23 12:34:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:26:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码