利用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。
优秀代码的设计原则包括了中心化配置和问题及时发现,但是上面的方案两个缺点:
- 要求每个团队成员都要设置自己的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,也可以避免未经格式化的代码提交。
- 智能机器人崛起背后的中国力量
- 企业微服务架构转型-实施步骤
- Andrew Ng机器学习课程笔记--week2(多元线性回归&正规公式)
- 科技第六感:黑客控制你的车!不信?其实很简单
- python多版本的pip共存问题解决办法
- C++ 对vector进行排序
- 小程序优化36计
- 神经网络权重初始化问题
- Andrew Ng机器学习课程笔记--week11(图像识别&总结划重点)
- 市民近期到南沙有望体验到无人驾驶技术
- Andrew Ng机器学习课程笔记--week10(优化梯度下降)
- Andrew Ng机器学习课程笔记--week9(下)(推荐系统&协同过滤)
- Andrew Ng机器学习课程笔记--week9(上)(异常检测&推荐系统)
- python程序员开发必备的5大工具,你用过几个?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 学会23个linux常用命令,不做前端切图仔~
- Python新手之pycharm调试指南
- 【设计模式系列】行为型之状态模式
- PHP运行模式
- 马上2021年了线性表你还不知道原理?给老王整的明明白白
- 分治-芯片测试问题
- 你说啥什么?注解你还不会?
- Mybatis系列第五讲 Mapper接口多种方式传参详解、原理、源码解析
- Mybatis系列第十讲 动态SQL,这么多种你都会?
- 3D图形学线代基础
- Splash抓取jd
- codeforces 1395C(暴力枚举)
- 不到100行代码搞定Python做OCR识别身份证,文字等各种字体
- codeforces 1389B(贪心)
- 又一个自动生成项目目录组件tree-cli,快速生成Readme项目结构