专栏首页大神带我来搬砖利用gradle plugin和git hook进行自动化代码格式化

利用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,也可以避免未经格式化的代码提交。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Git一直用不明白?说明你没用过这个网站

    Git是近年来越来越流行的版本控制工具,然而与传统的版本控制工具svn比起来,git由于具有分布式的特点,在理解和使用上不是那么的直观,比如远程分支的fetch...

    大神带我来搬砖
  • 一步步成为linux大神——bash shell中管道和其他命令分隔符的优先级

    一般在bash中,用“|”作为管道,即pipeline,还可以用“;”之类的分隔符连接多个命令。那么下面这个命令的输出是什么呢? date; who |wc 根...

    大神带我来搬砖
  • 一步步成为linux大神——什么时候bash -c会创建child shell

    在服务器上运行 bash -c "python -m SimpleHTTPServer" 此时另一个窗口运行 pstree -sp 10784 # 107...

    大神带我来搬砖
  • 这8点能教你如何更好地阅读代码

    译者:Tocy, 亚林瓜子, 总长 出处:开源中国 链接:https://www.oschina.net/translate/how-to-read-code...

    顶级程序员
  • 我的编码习惯 - 参数校验和国际化规范

    今天我们说说参数校验和国际化,这些代码没有什么技术含量,却大量充斥在业务代码上,很可能业务代码只有几行,参数校验代码却有十几行,非常影响代码阅读,所以很有必要把...

    哲洛不闹
  • 开发者的中年危机:接下来做什么?

    我之所以会走这一步,是因为在我回顾过去已经取得的成绩之后,我不知道接下来的30年应该做什么。

    哲洛不闹
  • 比较全面的MySQL优化参考

    本文整理了一些MySQL的通用优化方法,做个简单的总结分享,旨在帮助那些没有专职MySQL DBA的企业做好基本的优化工作,至于具体的SQL优化,大部分通过加适...

    wangxl
  • 重构:撰写合格的代码

    在「代码重构之道」里,我犯了个懒,讨论了什么情况下需要考虑重构,以及工具和方法来促进重构,但对如何重构代码本身,或者说:如何把烂代码转化成好代码,或者至少是合格...

    tyrchen
  • 如何远程调试Python代码

    平时使用python写的代码对外部依赖性都不复杂,这些代码在本地调试,运行没问题之后,就可以放到生产去跑了。然而,最近的一个项目,由于使用了一些内部服务,需要连...

    py3study
  • zephir-(3)你的第一个PHP拓展

    #zephir-你的第一个PHP拓展# ? ##前言## 先在这里感谢各位zephir开源技术提供者 在之前的介绍中大家不仅了解了zephir具体是一个什么样的...

    喵了个咪233

扫码关注云+社区

领取腾讯云代金券