俗话说,非我族类其心必异。在软件项目的开发过程中,整个团队万万不可同床异梦离心离德,因此统一代码规范也就至关重要了。
良好的代码规范可以增加代码的可读性从而提高代码的可维护性。同时,统一的代码规范更可以减少不必要的麻烦,比如一个人习惯两个空格缩进,另一个人设置了四个空格,如果第二个人仅仅修改了第一个人的部分代码但此时IDE进行了格式化,版本控制的diff工具会认为整个代码文件都进行了修改,可谓牵一发而动全身,不免打草惊蛇,弄得风声鹤唳草木皆兵。
统一代码规范,我们最早采用的方法是使用Checkstyle插件,如果代码不符合规范,持续集成中maven或者gradle的构建过程就会失败。
但是己所不欲勿施于人,增加了对代码的格式要求,就必须提供对应的代码格式化工具,否则人工格式化代码会增大工作量,比如每次按control+shift+f也是需要三次按键的。想要自动格式化代码,eclipse中可以设置save actions,idea也可以安装save actions插件,在保存文件时进行自动format。
优秀代码的设计原则包括了中心化配置和问题及时发现,但是上面的方案两个缺点:
- 要求每个团队成员都要设置自己的IDE,不能在一个地方统一管理。
- 未经格式化的代码也会被提交,只有下一次持续集成的时候才会被发现。
现在找到了spotlessApply插件,结合git的hook解决了这两个问题。在gradle中设置如下
plugins {
id 'java'
id "com.diffplug.gradle.spotless" version "3.16.0"
}
group 'test'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
spotless {
java {
googleJavaFormat()
indentWithTabs(2)
indentWithSpaces(4)
}
}
def hook = new File("$rootProject.projectDir/.git/hooks/pre-commit")
hook.text = """#!/bin/bash
echo "will run nova code format"
./gradlew spotlessApply
"""
首先借助gradle强大的代码能力,自动在项目的git目录中创建hook,然后该hook在git的commit之前,会执行gradlew spotlessApply
,进行代码的自动格式化。既不需要每个人设置IDE,也可以避免未经格式化的代码提交。
网友评论