vs简易新闻建设网站,网站后期的维护和更新,国外 创意 网站,酒店网站html全文速览#xff1a;
1、关于代码编码质量2、如何小成本有效管理企业内的编码规范 2.1 阿里编码规约IDE插件2.2 CheckStyle IDE插件 3、如何在代码提交中检验规范 3.1 阿里编码规约配置git precommit check3.2 CheckStyle配置git precommit check3.3 实践
1、关于代码编码质…全文速览
1、关于代码编码质量2、如何小成本有效管理企业内的编码规范 2.1 阿里编码规约IDE插件2.2 CheckStyle IDE插件 3、如何在代码提交中检验规范 3.1 阿里编码规约配置git precommit check3.2 CheckStyle配置git precommit check3.3 实践
1、关于代码编码质量
关于企业内部如何管控代码规范、保证应用服务质量是一个基础性的问题只要是有技术性要求的项目都应该遵守一套既定的保障应用代码质量的规范。
常规的小成本而有见效的方式就是使用编辑器或者代码规范检测的方式控制代码的提交。提交的代码再依赖组件做人工的code review来把关。
常见的规范扫描工具阿里编码规约扫描、checkStyle。
今天主要描述这两个工具如何在日常编码过程中使用以及如何与git配合来规范代码的提交。
2、如何小成本有效管理企业内的编码规范
2.1 阿里编码规约IDE插件
阿里编码规约扫描是一个成熟的组件我这边使用的是IDEA:
可以直接在插件市场中进行下载Alibaba Java Coding Guidelines如果步骤一存在困难的可以前往github下载源码进行打包(https://github.com/alibaba/p3c)最终打包成包含依赖的jar包我这边构建了一个p3c-pmd-2.1.1-jar-with-dependencies.jar打包后在IDEA中从本地地址导入插件
以上两种方式已经可以成功安装插件只需要【Restart IDE】就可以生效。
重启后在某一个类文件中右击或者在顶部菜单栏【Tools - 阿里编码规约】下就可以发现它点击即可触发扫描。
如果IDE性能有限建议关闭实时检测。
2.2 CheckStyle IDE插件
与阿里编码规约类似也是在插件市场中直接下载重启IDE后生效如果步骤一存在困难可以下载官方打包的release版本然后导入 -- https://github.com/checkstyle/checkstyle/releases?page1。
注意checkStyle与JAVA版本的对应关系否则启动检测你将发现提示has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0。
JRE And JDKRuntime of Checkstyle is limited only by minimal version or JRE.
Checkstyle versionJRE version10.x11 and above7.x, 8.x, 9.x8 and above6.x6 and above5.x5 and above
官方文档链接https://checkstyle.sourceforge.io/
3、如何在代码提交中检验规范
通用流程是一致的两者就是在指令以及输出内容上有所差异一般pre-commit的配置如下
在项目根目录 .git/hooks 下 找到 pre-commit.example文件简单查阅文档内也是会给到一定的提示。cp pre-commit.example pre-commit 生成正式生效的文件 pre-commit下面主要是在这个内部书写检测逻辑大体的一般是 a. 从git的提交数据中获取到修改的文件或目录遍历文件或目录 b. 针对每一项执行检查具体规范具体指定检查出修改项 c. exitcode返回非0不会提交代码。exitcode为0表示通过会提交代码
以下主要展示两者的demo
3.1 阿里编码规约配置git precommit check
指令 java -cp ./p3c-pmd-2.1.1-jar-with-dependencies.jar net.sourceforge.pmd.PMD -d ./Task.java -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
-cp 指定使用的JAR包以及启动类-d 指定需要检测的文件或目录多个文件使用逗号相连-R 指定检测所需的配置文件这些配置文件是alibaba-pmp-p3c项目下默认自带的也可以根据语法自定义-f 指定输出的格式类型支持的输出形式有很多
Available report formats and their configuration properties are:codeclimate: Code Climate integration.csv: Comma-separated values tabular format.problem - Include Problem column default: truepackage - Include Package column default: truefile - Include File column default: truepriority - Include Priority column default: trueline - Include Line column default: truedesc - Include Description column default: trueruleSet - Include Rule set column default: truerule - Include Rule column default: trueemacs: GNU Emacs integration.empty: Empty, nothing.html: HTML formatlinePrefix - Prefix for line number anchor in the source file.linkPrefix - Path to HTML source.ideaj: IntelliJ IDEA integration.classAndMethodName - Class and Method name, pass .method when processing a directory. default: sourcePath - Source path. default: fileName - File name. default: summaryhtml: Summary HTML format.linePrefix - Prefix for line number anchor in the source file.linkPrefix - Path to HTML source.text: Text format.textcolor: Text format, with color support (requires ANSI console support, e.g. xterm, rxvt, etc.).color - Enables colors with anything other than false or 0. default: yestextpad: TextPad integration.vbhtml: Vladimir Bossicard HTML format.xml: XML format.encoding - XML encoding format, defaults to UTF-8. default: UTF-8xslt: XML with a XSL Transformation applied.encoding - XML encoding format, defaults to UTF-8. default: UTF-8xsltFilename - The XSLT file name.yahtml: Yet Another HTML format.outputDir - Output directory.样例
#!/bin/sh
# claire# From java package
# alicheck version: 2.2.1
# jdk version: 1.8function print(){
echo aliCheck $*
}print Javacode stylecheck starting, please wait...
wdpwd
print Workdir: $wdcheck_jar_path$wd/.git/jars/p3c-pmd-2.1.1-jar-with-dependencies.jar
check_xml_pathrulesets/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
check_result_file$wd/temp# 清空temp文件
rm -rf $check_result_fileis_err0
is_warn0path
for file in git status --porcelain | sed s/^...// | grep \.java$ | grep -v test;
do
path$wd/$file
done
if [ x${path} ! x ];thenprint Check file: $pathrejava -cp $check_jar_path net.sourceforge.pmd.PMD -d $path -R $check_xml_path -f text $check_result_fileerrcat temp | grep va:err_countcat temp | grep va: | wc -lif [[ $err *va:* ]];thenprint detect error lines count: ${err_count}print ${err}is_err1fi
fi
print Javacode stylecheck finished. Thank you for your commit!rm -rf $check_result_fileif [ $is_err -ne 0 ] || [ $is_warn -ne 0 ]
then
print Please return and fix stylecheck warnings before code commit
exit 1
fiexit 03.2 CheckStyle配置git precommit check
指令java -jar ./checkstyle-8.45-all.jar -c ./checkStyle.xml /Task.java -f text -o outputTempFile
-jar 指定checkstyle jar包位置-c 指定检查的配置文件 后面紧跟要检查的文件或目录-f 指定输出的格式类型 有XML, SARIF, PLAIN-o 指定输出检查结果的位置默认不指定是输出到终端
样例
#!/bin/sh
# claire# From java package
# checkStyle version: 8.45
# jdk version: 1.8function print(){
echo checkStyle $*
}print Javacode stylecheck starting, please wait...
wdpwd
print Workdir: $wdcheck_jar_path$wd/.git/jars/checkstyle-8.45-all.jar
check_xml_path$wd/.git/files/checkStyle.xml
check_result_file$wd/temp# 清空temp文件
rm -rf $check_result_fileis_err0
is_warn0path
for file in git status --porcelain | sed s/^...// | grep \.java$ | grep -v test;
do
path$wd/$file
done
if [ x${path} ! x ];thenprint Check file: $pathrejava -jar $check_jar_path -c $check_xml_path $path -f plain -o $check_result_fileerrcat temp | grep ERRORerr_countcat temp | grep ERROR | wc -lwarncat temp | grep WARNwarn_countcat temp | grep WARN | wc -linfocat tempif [[ $err *ERROR* ]];thenprint detect error lines count: ${err_count}print ${err}is_err1fiif [[ $warn *WARN* ]];thenprint detect warning lines count: ${warn_count}print ${warn}is_warn1fi
fi
print Javacode stylecheck finished. Thank you for your commit!rm -rf $check_result_fileif [ $is_err -ne 0 ] || [ $is_warn -ne 0 ]
then
print Please return and fix stylecheck warnings before code commit
exit 1
fiexit 03.3 实践
以上任意一款git pre commit 配置完成后
git add .git commit -m “test”
提交后就会开启代码检测如果存在拦截的逻辑就无法继续commit
aliCheck:
git commit -m test1
aliCheck Javacode stylecheck starting, please wait...
aliCheck Workdir: xxxx
aliCheck Check file: xxxx/Task.java
aliCheck detect error lines count: 4
aliCheck xxx/Task.java:64: 方法名【UUUSE2345789】不符合lowerCamelCase命名风格
aliCheck Javacode stylecheck finished. Thank you for your commit!
aliCheck Please return and fix stylecheck warnings before code commitcheckStyle: git commit -m test2
checkStyle Javacode stylecheck starting, please wait...
checkStyle Workdir: XXX
checkStyle Check file: xxx/Task.java
Checkstyle ends with 28 errors.
checkStyle detect error lines count: 28
checkStyle [ERROR] xxx/Task.java:3: Not allow chinese character ! [RegexpSingleline]
......
[ERROR] xxx/Task.java:71:29: is not preceded with whitespace. [WhitespaceAround]
checkStyle Javacode stylecheck finished. Thank you for your commit!
checkStyle Please return and fix stylecheck warnings before code commit