《代码规范》_p3c

背景

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

阿里大牛们推出的《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 相对难一些,网上找的,能看懂和修改即可。

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容