2023Gradle入门

前言

Gradle是一个项目构建工具,它最早出现于2012年,由Google大力推广,受到了开发者的欢迎。在此之前,项目构建主要依赖Ant和Maven等工具。、

Ant是最早的构建工具之一,2000年已经发布,它完全用Java编写,可以执行基于XML的构建文件。然而,它的缺点是构建过程不规范,且处理jar包依赖问题比较麻烦。

Maven是另一个广受欢迎的构建工具,发布于2004年。它采用pom.xml文件来管理项目,能够自动化下载并管理项目所需的jar包依赖。然而,Maven也有其局限性,例如配置复杂,且生命周期限制较多

Gradle的出现,可以说是对Ant和Maven的集大成者。它既规范又灵活,支持多语言环境,且使用领域特定语言(如Groovy)编写构建脚本。Gradle的出现,改善了之前构建工具的一些问题,受到了开发者的欢迎。

一、✨Gradle安装和配置

1. 安装Gradle

Gradle官方网站-Gradle Build Tool

  1. 进入官网

    image-20230908211305646

  2. 点击Install Gradle

    image-20230908211419957

    此处选择自己想要的版本进行下载,下载完整版并解压下载的Gradle

    image-20230908211555827

2. 配置Gradle

  1. 配置环境变量,此处有三个地方需要配置

    image-20230908211759613

    image-20230908211801935

    image-20230908211909633

    提示:GRADLE_USER_HOME配置的本地仓库和Gradle wrapper缓存目录,是可以和Maven共用同一个地址

  2. 配置完成后,在cmd中输入gradle -v,出现以下界面便配置成功了

    image-20230908212027663

二、🎊Gradle创建一个项目

Gradle项目目录结构

image-20230908213219720

提示:只有war工程才有webapp目录,对于普通的jar工程则没有;gradlew和gradlew。bat执行的指定wrapper版本中的gradle指令,不是本地安装的gradle的指令

创建方式一

本次使用Spring官方脚手架创建,IDEA中同理

Spring官方脚手架-Spring Initializr

image-20230908214047307

与之前描述的目录结构一致

image-20230908214327886

创建方式二

使用命令行创建Gradle项目

先创建一个名为gradle02的目录,然后进入该目录输入以下命令

gradle init

image-20230908221753837

image-20230908221917888

三、🎎Gradle常见指令

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

需要注意的是:gradle的指令要在含有 build.gradle的目录执行,且初次执行编译和构建的命令时会下载依赖,这个过程很慢

四、🛒修改Maven下载源

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

打开gradle解压目录下的init.d文件夹,阅读其中的readme.txt文件可知,在该目录下创建以.gradle结尾的初始化脚本文件,这些文件会在build之前就执行

原文:You can add .gradle (e.g. test.gradle) init scripts to this directory. Each one is executed at the start of the 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/' }
        }
    }
}

allprojects:针对所有的工程目录,项目所需要的jar包会从repositories下载

buildscript:是build.gradle构建脚本使用的,如果构建脚本本身需要一些依赖,它就会去repositories中的仓库去下载

使用mavenLocal(),它会默认去Maven本地仓库寻找,前提是配置了M2_HOME环境变量

image-20230909103636015

拓展

init.gradle文件说明

  1. 在命令行指定文件,例如:gradle --init-script yourdir/init.gradle -q taskName。你可以多次输入此命令来指定多个init文件

  2. 把init.gradle文件放到 USER_HOME/.gradle/ 目录下

  3. 把以.gradle结尾的文件放到 USER_HOME/.gradle/init.d/ 目录下

  4. 把以.gradle结尾的文件放到 GRADLE_HOME/init.d/ 目录下

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

仓库地址说明

  1. mavenLocal(): 指定使用maven本地仓库,而本地仓库在配置maven时settings文件指定的仓库位置。如E:/repository;

    gradle 查找jar包顺序如下:

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

    从第一个配置文件中寻找本地仓库,如果没有就去第二个配置文件中寻找本地仓库的地址,如果第二个还是没有,就会去.m2下面的文件夹中寻找jar包

  2. maven { url 地址}:指定maven仓库,一般用私有仓库地址或其它的第三方库【比如阿里镜像仓库地址】。

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

  4. 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仓库中存放的方式。

阿里云仓库地址说明

仓库服务 (aliyun.com)

仓库地址

image-20230909150621543

gradle 配置指南

在 build.gradle 文件中加入以下代码:

allprojects {
  repositories {
    maven {
      url 'https://maven.aliyun.com/repository/public/'
    }
    mavenLocal()
    mavenCentral()
  }
}

如果想使用其它代理仓,以使用 central 仓为例,代码如下:

allprojects {
  repositories {
    maven {
      url 'https://maven.aliyun.com/repository/public/'
    }
    maven {
      url 'https://maven.aliyun.com/repository/central'
    }
    mavenLocal()
    mavenCentral()
  }
}

加入你要引用的文件信息:

dependencies {
  compile '[GROUP_ID]:[ARTIFACT_ID]:[VERSION]'
}

执行命令:

gradle dependencies 或 ./gradlew dependencies 安装依赖

五、👓Wrapper包装器

Gradle Wrapper 实际上就是对 Gradle 的一层包装,用于解决实际开发中可能会遇到的不同的项目需要不同版本的 Gradle

例如:把自己的代码共享给其他人使用,可能出现如下情况:

  1. 对方电脑没有安装 gradle
  2. 对方电脑安装过 gradle,但是版本太旧了

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

那如何使用Gradle Wrapper 呢?

项目中的gradlew、gradlew.cmd脚本用的就是wrapper中规定的gradle版本。参见源码

而我们上面提到的gradle指令用的是本地gradle,所以gradle指令和gradlew指令所使用的gradle版本有可能是不一样的

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

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

GradleWrapper的执行流程

  1. 当我们第一次执行 ./gradlew build 命令的时候,gradlew 会读取 gradle-wrapper.properties 文件的配置信息

  2. 准确的将指定版本的 gradle 下载并解压到指定的位置(GRADLE_USER_HOME目录下的wrapper/dists目录中)

  3. 并构建本地缓存(GRADLE_USER_HOME目录下的caches目录中),下载再使用相同版本的gradle就不用下载了4.之后执行的 ./gradlew 所有命令都是使用指定的 gradle 版本。

    gradle-wrapper.properties 文件解读:

    字段名说明
    distributionBase下载的Gradle压缩包解压后存储的主目录
    distributionPath相对于distributionBase的解压后的Gradle压缩包的路径
    zipStoreBase同distributionBase,只不过是存放zip压缩包的
    zipStorePath同distributionPath,只不过是存放zip压缩包的
    distributionUrlGradle发行版压缩包的下载地址

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

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

笑的像个child

好人一生平安,先磕为敬

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

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

打赏作者

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

抵扣说明:

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

余额充值