引入CheckStyle提升Java代码质量
最近参与部分后端开发,觉得后端的代码上有些乱,比如无用导入,无用变量,访问修饰符不合理等等,这类问题以前也吐槽了多次,但始终一直拖着没有去定标准,推进规范化。于是,趁着周末,下定决心搞一搞。
与Java不同的是,前端JS/TS部分,因为有Husky+Tslint控制,风格层面就可以有效保障,难道后端就不行吗?肯定也可以。
CheckStyle
用什么控制呢,关于技术选型,似乎毫无疑问,之前曾翻看ThoughtWorks的19年技术栈统计报告,对于代码风格控制这块,大多选择CheckStyle。
OK,随众
使用方式
关于如何使用,有以下几个方式
- IDEA插件
- Maven插件
- 自写脚本
选择脚本
考虑了下,决定脚本实现,理由如下
- IDEA插件目前的文件扫描范围是所有文件,并不支持只扫描changed files或者stage中的文件,
项目开源,so有兴趣的可以提PR支持下
- Maven插件可以做到构建打包阶段,或者测试阶段跑,但是无法做到在pre commit时候做检测
- 脚本,可以自己编写pre-commit hook进行。但一个新入的dev就需要手动或执行命令将检测钩子放入.git/hooks下。
确定方案就开搞
具体配置
配置
配置所需文件如下
init.sh是作为开发初始化实施部署的,内容就是一个拷贝命令,这里
不支持Window默认的shell,当然用git bash可以
1
2
3
cp pre-commit ../../.git/hooks/
chmod +x ../../.git/hooks/pre-commitpre-commit
主要的检测靠这个,具体的代码,戳这里。注意,文件没有后缀。名字是Git的钩子,不可改。
checkstyle.jar
这个就是checkstyle的程序包
google_checks.xml
自定义代码风格配置.想修改,增加规则等直接这里修改
应用
Mac || Linux用户
IDE中选择init.sh,单击右键执行
Windws
手动拷贝pre-commit
到 ../../.git/hooks/
实现效果
当提交时,有错,提交失败,并会提示具体的错误文件及行列号
就这么爽
前端钩子工具husky
之前一直有个疑问。husky如何做到的跟钩子集成
因为想做到Git提交时检测,这就一定跟钩子打交道。上面的操作,最终是把想执行的checkstyle命令放到了pre-commit钩子中去。那前端的Husky肯定也是一样的吧?
如上即为当我们安装了husky包时,实际上会创建一堆的Git钩子,而内容均是执行husky中的脚本命令,可以理解为脚本命令的参数就是husky给我们开的配置口子,这样一想,实际上与上面我们的方案是一致的。
我们执行init.sh等价于npm i husky
强行控制代码风格有必要吗?
如上开心的控制住了代码风格,当然因为依赖着git hooks,假如提交时候就是把hooks关了,真的没招,之前就遇到过这样的队友。
诚然我们也可以构建打包时也加上检测。所以不合法的开挂提交后,我们仍然能让这些代码构建失败,报红。
但,问题是,这些人没有意识到统一代码风格的价值。我觉得只能用这一张图来感化这些人了。
写在最后
经过如上的配置,终于解决了一直拖着的技术栈,同时有这么两点收获
- Java代码风格的保障有了初步的方案,当然还可以继续再优化,比如是否可以自动修复一些错误呢?
- Git的钩子机制有了更多的了解,也明白了husky是如何去实现的。