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

良好的代码规范可以增加代码的可读性从而提高代码的可维护性。同时,统一的代码规范更可以减少不必要的麻烦,比如一个人习惯两个空格缩进,另一个人设置了四个空格,如果第二个人仅仅修改了第一个人的部分代码但此时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.8spotless {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,也可以避免未经格式化的代码提交。

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

  1. Android 热修复 Tinker Gradle Plugin解析

    本文已在我的公众号hongyangAndroid原创首发. 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/72667669 本文 ...

  2. **使用 Git Hook 实现网站的自动部署

    http://www.tuicool.com/articles/3QRB7jU 自动化能解放人类的双手,而且更重要的是,因为按照规定的流程来走,也减少了很多误操作的产生.不知道大家平时都是怎么样更新自 ...

  3. Jenkins构建之常用的触发器和Git Hook自动构建

    Jenkins项目构建细节之常用的构建触发器 Jenkins内置4种构建触发器: 触发远程构建 其他工程构建后触发(Build after other projects are build) 定时构建 ...

  4. Android Gradle Plugin 源码阅读与编译

    前言 为了解一些Andorid的构建流程,有时候需要阅读Android Gradle Plugin的相关源码的.自己阅读Android Gradle Plugin源码主要经历了三个时期: 1.AOSP ...

  5. [Gradle] 在 Eclipse 下利用 gradle 构建系统

    构建系统时候常常要用到 Ant, Maven 等工具,对于初学者来说,它们还是过于复杂,上手还是需要时间的.本文将向读者介绍一种全新的构建项目的方式 gradle,它简单.上手快,能大大节省项目的时间 ...

  6. 【Android 修炼手册】Gradle 篇 -- Android Gradle Plugin 主要流程分析

    预备知识 理解 gradle 的基本开发 了解 gradle task 和 plugin 使用及开发 了解 android gradle plugin 的使用 看完本文可以达到什么程度 了解 andr ...

  7. git maven 一键部署_Jenkins Git Maven搭建自动化部署项目环境 邮件通知

    简介 折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.com/j ...

  8. AS 自定义 Gradle plugin 插件 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. linux git hook,前端通过githook一键自动部署项目

    git hook 自动部署 本文章教大家,使用git hook来实现本地开发代码一行命令自动上传到远程服务器. 第一步创建空git仓库 终端进入你需要放项目的文件夹,可以通过ssh root@host ...

最新文章

  1. !aspxpages(即!dumphttpcontext)命令输出的解释
  2. 通过BeanFactory获取bean的几种方法
  3. 微软人工智能平台开源:利用《我的世界》测试AI软件
  4. 【转载】windows mobile 上隐藏和关闭X以及OK的处理
  5. 合工大python期末复习知识点汇总
  6. Web如何应对流量劫持?
  7. php version.,PHP_VERSION指什么
  8. canvas笔记-非零环绕原则及剪纸实例
  9. django objects.filter().exists()
  10. SublimeText3快捷键简要总结
  11. silverlight(二)样式
  12. libgdx的菜单配置,以及json文件的结构
  13. 2019 CSP-S第二轮认证一等奖获奖名单
  14. 求方程ax^2+bx+c=0的根,用3个函数分别求当b^2-4ac大于0、等于0和小于0时的根,并输出结果。 从主函数输入a, b, c的值。
  15. 3dmax中如何解决镜头穿透模型?
  16. 常见男女英文名,来历、释义
  17. 劳务派遣人员是否有加班费
  18. MFC中窗口实现拖拽文件功能
  19. 使用Python将mat文件转换为npy文件
  20. java 什么是原子操作_java原子操作CAS

热门文章

  1. 电脑网页的上网记录怎么查
  2. 浅谈 大数据分析:市场分析、运营分析、用户行为分析
  3. [FROM LUOGU]P1600 【NOIP2016DAY1T2】天天爱跑步
  4. Linux 探索之旅 | 第一部分第二课:下载 Linux,免费的噢
  5. 表驱动法(更优雅的写if-else、switch-case)
  6. win Server 2008 服务器应用程序不可用
  7. 【菜鸟教程】Kafka消息队列入门下(IDEA操作Kafka)
  8. C#之清空FileStream内容
  9. Wakeup linux system from sleep mode
  10. 什么命令能把Linux搞死机,linux 死机相关