Gradle项目构建工具入门

Gradle是一款由Google推出的基于JVM、通用灵活的项目构建工具。

下面学习下Gradle构建工具的使用,在工作中,本人使用Gradle的机会几乎没有过,都是用的Maven,但在研究Spring源码时研究过一点Gradle,因为Spring源码使用Gradle构建的,正所谓技多不压身嘛。

也正好说下在用Gradle编译Spring源码时遇到的问题。

1. Gradle安装

Gradle的安装和JDK的安装过程一样,需要配置环境变量,下面是官方文档的安装文档。

https://docs.gradle.org/current/userguide/installation.html

关于使用Gradle需要注意的点:

  • Gradle在配置时需要配置GRALE_USER_HOME变量,该变量的作用是配置 Gradle 本地仓库位置和 Gradle Wrapper缓存目录

  • SpringBoot 官方文档明确指出,目前 SpringBoot Gradle 插件需要gradle6.8版本及以上

在这里插入图片描述

  • 其中 SpringBoot Gradle 存在版本兼容问题,Gradle Idea 也存在兼容问题,所以要选择 6.8 版本及高于 6.8 版本的 Gradle,那么相应的 idea 版本也要升级,不能太老

    在编译Spring源码时,就是因为GradleIdea存在兼容问题导致,我本地安装的Gradle比较老,是6.7版本,导致Spring源码一直编译不过去,所以,只有将Idea版本升级

在这里插入图片描述

  • Gradle 版本说明:binary-only(二进制版本)、complete(完整版,相对于二进制版本,多了gradle文档及gradle源码)

在这里插入图片描述

2. Gradle项目目录结构

在这里插入图片描述

说明:

  • 只有war工程才有webapp目录,对于普通的jar工程并没有webapp目录
  • gradlewgradlew.bat执行的指定wrapper版本中的gradle指令,不是本地安装的gradle指令

3. Gradle中常用指令

常用gradle指令作用
gradle clean清空build目录
gradle classes编译业务代码和配置文件
gradle test编译测试代码,生成测试报告
gradle build构建项目
gradle build -x test跳过测试构建

gradle 的指令要在含有 build.gradle 的目录执行,和maven一样

可以将gradle的仓库目录配置和Maven仓库目录配置成同一个!!!

4. 修改maven下载源

Gradle 自带的 Maven 源地址是国外的,该 Maven 源在国内的访问速度是很慢的,除非使用了特别的手段。一般情况下, 建议使用国内的第三方开放的 Maven 源或企业内部自建 Maven

  • init.d 文件夹

可以在 Gradle init.d 目录下创建以.gradle 结尾的文件,.gradle 文件可以实现在 build 开始之前执行,所以可以在这个文件配置一些想预先加载的操作

  • init.d文件夹创建init.gradle文件
allprojects {
    repositories { 
        mavenLocal() 
        maven { name "Alibaba";  url "https://maven.aliyun.com/repository/public" } 
        maven { name "Bstek"; url "https://nexus.bsdn.org/content/groups/public/" } 
        mavenCentral() 
    }
    buildscript { 
        repositories { 
            maven { name "Alibaba"; url 'https://maven.aliyun.com/repository/public' } 
            maven { name "Bstek"; url 'https://nexus.bsdn.org/content/groups/public/' } 
            maven { name "M2"; url 'https://plugins.gradle.org/m2/' } 
        } 
    } 
}
  • 启用 init.gradle 文件的方法有:
    • 在命令行指定文件,例如:gradle --init-script yourdir/init.gradle -q taskName。可以多次输入此命令来指定多个init文件
    • init.gradle文件放到 USER_HOME/.gradle/ 目录下
    • 把以.gradle结尾的文件放到 USER_HOME/.gradle/init.d/ 目录下
    • 把以.gradle结尾的文件放到 GRADLE_HOME/init.d/ 目录下

如果存在上面的4种方式的2种以上,gradle会按上面的1-4序号依次执行这些文件,如果给定目录下存在多个init脚本,会按拼音a-z顺序执行这些脚本,每个init脚本都存在一个对应的gradle实例,在这个文件中调用的所有方法和属性,都会委托给这个gradle实例,每个init脚本都实现了Script接口

  • 仓库地址说明

mavenLocal():指定使用maven本地仓库,而本地仓库在配置mavensettings文件指定的仓库位置。如E:/repositorygradle 查找jar包顺序如下:

USER_HOME/.m2/settings.xml >> M2_HOME/conf/settings.xml >> USER_HOME/.m2/repository

maven { url 地址}:指定maven仓库,一般用私有仓库地址或其它的第三方库

mavenCentral():这是Maven的中央仓库,无需配置,直接声明就可以使用

jcenter()JCenter中央仓库,实际也是用的maven搭建的,但相比Maven仓库更友好,通过CDN分发,并且支持https访问,在新版本中已经废弃了,替换为了mavenCentral()

gradle通过指定仓库地址为本地maven仓库地址和远程仓库地址相结合的方式,避免每次都会去远程仓库下载依赖库。

这种方式也有一定的问题,如果本地maven仓库有这个依赖,就会从直接加载本地依赖,如果本地仓库没有该依赖,那么还是会从远程下载。但是下载的jar不是存储在本地maven仓库中,而是放在自己的缓存目录中,默认在 USER_HOME/.gradle/caches目录,当然如果我们配置过GRADLE_USER_HOME环境变量,则会放在 GRADLE_USER_HOME/caches目录,那么可不可以将gradle caches指向maven repository?答案是不行的,caches下载文件不是按照maven仓库中存放的方式

  • 阿里云仓库地址

    https://developer.aliyun.com/mvn/guide

5. Wrapper 包装器

Gradle Wrapper 实际上就是对 Gradle 的一层包装,用于解决实际开发中可能会遇到的不同的项目需要不同版本的 Gradle 问题。例如:把自己的代码共享给其他人使用,可能出现如下情况:

  • 对方电脑没有安装 Gradle

  • 对方电脑安装过 Gradle,但是版本太旧

这时候就可以考虑使用 Gradle Wrapper 了,这也是官方建议使用Gradle Wrapper的原因。实际上有了 Gradle Wrapper 之后,本地是可以不配置 Gradle 的,下载 Gradle 项目后,使用 gradle 项目自带的 wrapper 操作也是可以的。

那如何使用 Gradle Wrapper ?

项目中的gradlewgradlew.cmd脚本用的就是wrapper中规定的gradle版本。而上面提到的gradle指令用的是本地gradle,所以gradle指令和gradlew指令所使用的gradle版本有可能是不一样的。

gradlewgradlew.cmd的使用方式与gradle使用方式完全一致,只不过把gradle指令换成了gradlew指令。

也可在终端执行 gradlew 指令时,指定一些参数,来控制 Wrapper 的生成,比如依赖的版本等,如下:

参数名说明
–gradle-version用于指定使用的Gradle版本
–gradle-distribution-url用于指定下载Gradle发行版的url地址

具体操作如下所示 :

  • gradle wrapper --gradle-version=4.4:升级wrapper版本号,只是修改gradle.propertieswrapper版本,未实际下载

  • gradle wrapper --gradle-version 5.2.1 --distribution-type all :关联源码用

GradleWrapper 的执行流程:

  • 当第一次执行./gradlew build命令时,gradlew 会读取 gradle-wrapper.properties 文件的配置信息
  • 准确的将指定版本的 gradle 下载并解压到指定的位置(GRADLE_USER_HOME目录下的wrapper/dists目录中)
  • 并构建本地缓存(GRADLE_USER_HOME目录下的caches目录中),下载再使用相同版本的gradle就不用下载了
  • 之后执行的 ./gradlew 所有命令都是使用指定的 gradle 版本,如下图所示

在这里插入图片描述

gradle-wrapper.properties 文件解读

GRALE_USER_HOME 环境变量用于这里的 Gradle Wrapper 下载的特定版本的 gradle 存储目录。如果没有配置过 GRALE_USER_HOME 环境变量,默认在当前用户家目录下的.gradle 文件夹中

那什么时候选择使用 gradle wrapper、什么时候选择使用本地 gradle?

下载别人的项目或者使用操作以前自己写的不同版本的gradle项目时:用Gradle wrapper,也即:gradlew

什么时候使用本地gradle?新建一个项目时:使用gradle指令即可

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

止步前行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值