利用gradle plugin和git hook进行自动化代码格式化

时间:2022-06-16
本文章向大家介绍利用gradle plugin和git hook进行自动化代码格式化,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

俗话说,非我族类其心必异。在软件项目的开发过程中,整个团队万万不可同床异梦离心离德,因此统一代码规范也就至关重要了。

良好的代码规范可以增加代码的可读性从而提高代码的可维护性。同时,统一的代码规范更可以减少不必要的麻烦,比如一个人习惯两个空格缩进,另一个人设置了四个空格,如果第二个人仅仅修改了第一个人的部分代码但此时IDE进行了格式化,版本控制的diff工具会认为整个代码文件都进行了修改,可谓牵一发而动全身,不免打草惊蛇,弄得风声鹤唳草木皆兵。

统一代码规范,我们最早采用的方法是使用Checkstyle插件,如果代码不符合规范,持续集成中maven或者gradle的构建过程就会失败。

但是己所不欲勿施于人,增加了对代码的格式要求,就必须提供对应的代码格式化工具,否则人工格式化代码会增大工作量,比如每次按control+shift+f也是需要三次按键的。想要自动格式化代码,eclipse中可以设置save actions,idea也可以安装save actions插件,在保存文件时进行自动format。

优秀代码的设计原则包括了中心化配置和问题及时发现,但是上面的方案两个缺点:

  1. 要求每个团队成员都要设置自己的IDE,不能在一个地方统一管理。
  2. 未经格式化的代码也会被提交,只有下一次持续集成的时候才会被发现。

现在找到了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,也可以避免未经格式化的代码提交。