文章目录

  • Gradle是什么
  • Gradle安装
  • Gradle的配置
  • settings.gradle
  • build.gradle
  • dependencies 依赖
  • 依赖传递和继承
  • GradleWrapper


Gradle是什么

参考:Gradle教程,Gradle和Maven都可以用来进行Java依赖管理和项目构建,关于Maven使用可以查看:Maven的使用及POM配置,两者的差别是Gradle更偏向于是构建工具,为了构建带有依赖缓存功能(不是包管理功能),Maven是依赖包管理工具,通过插件带有一定的构建能力,这里说的构建是将源代码build成机器可以识别的机器码过程。
我们常用的高级语言按照转化成机器码的方式不同可以分为编译型语言解释型语言
编译型语言:要求由编译器提前将源代码一次性转换成二进制指令,即生成一个可执行程序,后续的执行无需重新编译。比如我们常见的 C、Golang 等,优点是执行效率高;缺点是可执行程序不能跨平台(不同的操作系统对不同的可执行文件的内部结构要求不同;另外由于不同操作系统支持的函数等也可能不同,所以部分源代码也不能跨平台)。
解释型语言:不需要提前编译,程序只在运行时才由解释器翻译成机器码,每执行依次就要翻译一次。比如我们常见的 Python、PHP 等,优点是较方便(对编写用户而言,省去了编译的步骤),实时性高(每次修改代码后都可直接运行),能跨平台;缺点是效率低。
半编译半解释型语言:混合了两种方式,源代码需要先编译成一种中间文件(字节码文件),然后再将中间文件拿到虚拟机中解释执行。比如我们常见的 Java、C# 等。
Gradle没有依赖包管理功能,它本地保存的是依赖缓存,没有本地仓库的概念,想在Gradle里加一个私有依赖比较麻烦;Maven是依赖包管理工具,使用本地仓库+远程仓库的方式,但是构建是靠插件完成的,不能像gradle那样搞特别多的魔法操作,相对简单稳定,Gradle由于版本更新太快且不向后兼容而饱受诟病,但还是要学.
Gradle是Groovy语言写的但核心代码还是java,Groovy是基于JVM的动态语言,把写Java程序变得像写脚本一样简单,写完就可以执行,Groovy内部会将其编译成Javaclass然后启动虚拟机来执行, 具有像Python的灵活动态语言。
在Gradle中,每一个待构建的工程是一个Project,构建一个Project需要执行一系列Task,比如编译、打包这些构建过程的子过程都对应着一个Task,五种常见的task:

  • clean 清理构建产物(./gradlew clean)
  • build 执行构建(./gradlew build)
  • test 运行测试(./gradlew test)
  • tasks 查看所有tasks(./gradlew tasks)
  • help 查看帮助信息(./gradlew help --task build)

Gradle安装

gradle下载地址,这里使用6.8.3版本,因为springboot要求6.8版本以上,下载binary-only到本地后直接解压配置环境变量即可使用(跟Maven类似),

SpringBoot实践(三十四):Gradle的使用_后端


本地有Maven库的把GRADLE_USER_HOME设置成本地库;

SpringBoot实践(三十四):Gradle的使用_java_02


SpringBoot实践(三十四):Gradle的使用_后端_03


如果使用IDEA直接创建Gradle工程,那么会根据idea绑定的Gradle版本自动下载;

Gradle的配置

使用IDEA创建Gradle工程与maven对比发现两者差异很小,核心文件build.gradle (包含项目构建所使用的脚本)和 settings.gradle (包含必要的设置,比如任务/项目之间的依赖关系)需要高频使用和修改;

SpringBoot实践(三十四):Gradle的使用_Java_04

settings.gradle

settings.gradle是模块Module配置文件,主要是用于配置子模块,根目录下的setting.gradle脚本文件是针对module的全局配置,如果你只把Gradle当做Maven的替代品用于依赖管理而不关注项目编译任务和顺序,settings.gradle基本不用修改;

// 为指定父模块的名称 
rootProject.name = 'project-root'
//子模块
include ':project-child'

build.gradle

build.gradle类比于Maven的POM.xml,如下:

plugins {
    id 'java'
}
group 'com.example'
version '0.0.1-SNAPSHOT'
repositories {
    mavenCentral()
}
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}
dependencies 依赖

dependencies里面放的是依赖坐标:其中key的含义:

SpringBoot实践(三十四):Gradle的使用_Gradle_05

依赖传递和继承

依赖包括本地依赖,项目依赖,直接依赖,如下:

SpringBoot实践(三十四):Gradle的使用_java_06


想要实现父子继承的关系, 在根项目的 build.gradle 中设置 allprojects 和 subprojects,allprojects是对所有project的配置,包括Root Project。而subprojects是对所有Child Project的配置,

allprojects {
//全局配置文件加载
//版本定义
//全局插件
}
subprojects {
//构建脚本
//子模块插件
//依赖仓库
//子模块依赖
//打包方式
}

GradleWrapper

gradlewrapper 是Gradle的一层包装,用来解决版本差异过大导致的不兼容问题,不过你引入的第三方应用使用什么版本的gradle,统一使用gradlewrapper进行编译,其还可以针对每个项目单独包装个性化定制(搭配gradle.properties),比如gradle版本号,增大内存,开启守护进程加快编译速度等,如果是本地自己创建的工程,可以不关心不适用gradlewrapper ,但是如果集成第三方gradle工程,gradlewrapper是推荐的方式,但如果实在不想使用这种方式,在导入或者新建项目的时候选择:

SpringBoot实践(三十四):Gradle的使用_Gradle_07


gradle-wrapper会绑定一个版本的gradle,在gradle-wrapper.properties中,如6.1版本绑定的是6.4.1版本的gradle,其默认会下载对应版本的gradle,使用 GRADLE_USER_HOME作为包的本地仓库,gradle-wrapper.properties 文件记录:当前项目想使用的 gradle 版本?去哪里下载这个版本的 gradle?下载之后的压缩包保存在哪里?压缩包解压到哪里?

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

可以发现gradlewapper会下载gradle绑定的版本到rapper/dists:

SpringBoot实践(三十四):Gradle的使用_java_08


当我们第一次执行 ./gradlew build 命令的时候,gradlew 会读取 gradle-wrapper.properties 文件的配置信息,准确的将指定版本的 gradle 下载并解压到指定的位置。之后执行的 ./gradlew 所有命令都是使用指定的 gradle 版本。

可以在idea中配置是否使用gradlewrapper,use gradle from 选择gradle-wrapper.properties file:

SpringBoot实践(三十四):Gradle的使用_java_09


链接:https://pan.baidu.com/s/1X_ZmctGDnvG50NAYCtiKsA

提取码:zrbn