美文网首页
《代码规范》_p3c

《代码规范》_p3c

作者: tjhuey | 来源:发表于2022-03-16 10:47 被阅读0次

    背景

    由于开始没有统一的编码风格、代码规范,导致现在代码维护的成本越来越高。

    阿里大牛们推出的《Java开发手册》(目前最新应该是嵩山版已上传该目录下,下一个版本是黄山版)都是经过实践验证的精华总结,且在业内使用的越来越广。我司(chapter委员会决定)也决定基于这套规范提高代码质量,间接提升提升Codereview

    三个方面:

    1.开发阶段 :IDEA插件 ,自觉遵守,算是一种约定 (COC)

    2.单测阶段:Sonarqube 借助jaccoo插件 扫描UT 生成覆盖率及漏洞报告,根据代码漏洞进行纠正

    备注:sonar阶段扫描可在pom中指定扫描目录和排除非扫描目录。最后根据百分比计算覆盖率,

    我们可以排除一些非扫描的文件,比如filter,interceptor组件等。

    3.提交阶段:代码提交阶段 通过gitlab钩子(Server hooks)及p3c-pmd进行代码检测

    1. 开发阶段 _IDE插件 (主推 IDEA)

    image

    备注:如果你之前装过该插件,并且你的IDEA 导致你电脑CPU飙升400% ,甚至更高,可能是插件低版本导致的原因,可升级改插件即可

    1. 单测阶段_Sonarqube

    好像目前每个条线已经实现。(如未实现,继续补充)

    1. 提交阶段_p3c-pmd & Server Hooks

    3.1 P3C-PMD

    P3c插件,github地址:https://github.com/alibaba/p3c

    备注:有没法发现,idea插件,嵩山版文档都来源于这里

    使用最新的2.1.1版本,由于2.1.1版本中增加了一项检测规则【 LockShouldWithTryFinallyRule 】,而这个规则是使用Kotlin写的,所以在编译打包时要格外注意。

    下面为具体执行步骤

    ## 1.克隆代码到本地
    git clone https://github.com/alibaba/p3c.git 
    ## 2.进入p3c-pmd 本地目录
    cd /Users/huey/dev/java/ideaWorkSpace/rongc/p3c/p3c-pmd
    ## 3.先编译Kotlin代码,执行:
    mvn clean kotlin:compile package
    ## 4.上一步执行成功后,执行:
     mvn package
    ## 5\. java -cp p3c-pmd-2.1.1-jar-with-dependencies.jar net.sourceforge.pmd.PMD -d /Users/huey/dev/java/ideaWorkSpace/rongc/zx-bme/staff-zx-service/staff-zx-pfmc/src/main/java/com/sunacwy/staff/zx/pfmc -R rulesets/java/ali-comment.xml
    
    

    下面为步骤5规则

    java -cp 
    p3c-pmd-2.0.1-jar-with-dependencies.jar
     net.sourceforge.pmd.PMD -d {代码路径} -R rulesets/java/ali-comment.xml
    
    

    相关截图

    步骤3截图(kotlin相关规则 package成功)

    image

    步骤4截图(package成功)

    image

    步骤5成功 (p3c-pmd插件测试成功)

    image

    备注:我们只允许了一个xml解析模板,实际有这10个模板,可手动指定

    image

    3.2 Gitlab钩子配置说明

    p3c-pmd插件测试成功后,接下来就是集成到gitlab 的Server Hooks

    网上有很多说明文章可以参考,不再赘述。

    Gitlab官方说明,参考: https://docs.gitlab.com/ee/administration/server_hooks.html#set-a-global-server-hook-for-all-repositories

    • pre-receive

    • post-receive

    • update

    hook机制使得GitLab能在特定的重要动作发生前/时/后触发自定义的脚本,

    我们想要达到的效果是每次提交前进行代码检查,因此要用到pre-receive文件 。

    有两种配置方法:(看上面绿色底的gitlab官网说明)

    一、全局配置(git上任意项目代码提交都会检查)

    1.到gitlab服务的hooks目录:/opt/gitlab/embedded/service/gitlab-shell/hooks

    2.上传p3c-pmd-2.1.1-jar-with-dependencies.jar到该目录,并重命名为:p3c-pmd-2.1.1.jar

    3.在hooks目录下创建 pre-receive.d 目录

    4.进入pre-receive.d 目录,创建:pre-receive 文件,pre-receive文件内容为附件pre-receive.sh的内容 (注意:不要有任何后缀,去掉.sh)

    5.为pre-receive文件赋予执行权限:chmod 776 pre-receive

    6.为pre-receive.d 目录设置git权限,执行:chown -R git:git /opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d

    7.进行测试即可

    备注:和每个项目不同的只是目录,若配置全局后,可通过shell 增加白名单机制

    二、针对项目配置(只检查该项目)

    注意:gitlab 10.0版本之后默认使用hash的方式存储代码。

    项目的存储路径可以在gitlab的管理页面中查看,路径是:

    Admin Area > Overview > Projects

    image

    到gitlab服务器项目的仓库目录下:

    /var/opt/gitlab/git-data/repositories/{your_repository_dir}.git/

    在该目录下创建文件夹:custom_hooks (根据gitllab 官网 Create a server hook for a repository)

    进入该目录,上传p3c-pmd-2.1.1-jar-with-dependencies.jar到该目录,并重命名为:p3c-pmd-2.1.1.jar

    创建:pre-receive 文件(注意:不要有任何后缀)

    为pre-receive文件赋予执行权限:chmod 776 pre-receive

    为custom_hooks 目录设置git权限,执行:chown -R git:git /var/opt/gitlab/git-data/repositories/{your_repository_dir}.git/custom_hooks

    image

    pre-receive文件内容为附件pre-receive.sh的内容 (注意:不要有任何后缀,去掉.sh)

    shell中增加白名单(当全局检查时,可以设置放过指定仓库)

    注意:JAVA_HOME 和 CHECK_JAR_HOME的路径设置;

    CHECK_JAR_HOME 是放置P3C-XX.jar的目录路径。

    备注: 此目录有个hooks 软连接,实际上就是全局配置方式

    3.3 客户端提交测试

    至此,Gitlab的全局hook已配置完毕,当有代码提交时就会检查代码,只有符合规范才能提交成功。下图是在idea中提交的信息(命令行提交一样):

    修改所有的错误后,才能提交成功

    image image

    3.4.备注:

    附件pre-receive.sh的内容 如下操作后,可放开代码Mege,0认为检测成功,可以进行Push Merge。

    image
    1. 其他

    没有进行全局配置 并且 某个项目的测试,即既进行全局规范检测,某个项目的规范检测,

    采用统一规范,个人觉得同时配置没有实际意义。

    1. 总结

    某个项目(Create a server hook for a repository)测试ok

    全局测试(Create a global server hook for all repositories)测试ok

    全局测试 白名单 跳过某仓库.git 测试ok

    全局测试 白名单 跳过某组group 测试ok

    整体上Shell 相对难一些,网上找的,能看懂和修改即可。

    如果有啥疑问可以相互沟通,欢迎指正与总结。

    如果感觉还可以的话,记得点赞哈,ღ( ´・ᴗ・` )比心

    相关文章

      网友评论

          本文标题:《代码规范》_p3c

          本文链接:https://www.haomeiwen.com/subject/szfpdrtx.html