笔记 笔记
首页
  • 开发工具
  • Java Web
  • Java 进阶
  • 容器化技术
  • Java 专栏

    • Java 核心技术面试精讲
    • Java 业务开发常见错误 100 例
  • 数据库专栏

    • MySQL 实战 45 讲
    • Redis 核心技术与实战
  • 安全专栏

    • OAuth 2.0 实战课
  • 计算机系统
  • 程序设计语言
  • 数据结构
  • 知识产权
  • 数据库
  • 面向对象
  • UML
  • 设计模式
  • 操作系统
  • 结构化开发
  • 软件工程
  • 计算机网络
  • 上午题错题
在线工具 (opens new window)

EasT-Duan

Java 开发
首页
  • 开发工具
  • Java Web
  • Java 进阶
  • 容器化技术
  • Java 专栏

    • Java 核心技术面试精讲
    • Java 业务开发常见错误 100 例
  • 数据库专栏

    • MySQL 实战 45 讲
    • Redis 核心技术与实战
  • 安全专栏

    • OAuth 2.0 实战课
  • 计算机系统
  • 程序设计语言
  • 数据结构
  • 知识产权
  • 数据库
  • 面向对象
  • UML
  • 设计模式
  • 操作系统
  • 结构化开发
  • 软件工程
  • 计算机网络
  • 上午题错题
在线工具 (opens new window)

购买兑换码请添加

添加时候请写好备注,否则无法通过。

  • 设计模式

  • JVM 详解

  • Linux

  • Redis

  • 分布式锁

  • Shiro

  • Gradle

    • Gradle 入门
      • Gradle 简介
      • 常见的项目构建工具
      • Gradle 安装
        • Gradle 安装说明
        • 配置环境变量
      • Gradle 项目目录结构
      • 创建 Gradle 项目
        • 脚手架
        • 命令行
        • Gradle 中的常用指令
      • 修改 Maven 下载源
        • 认识 init.d 文件夹
        • 在 init.d 文件夹创建 init.gradle 文件
        • 启用 init.gradle 文件的方法有
        • 仓库地址说明
        • 阿里云仓库地址
      • Wrapper 包装器
        • 如何使用Gradle Wrapper
        • GradleWrapper 的执行流程
        • 那什么时候选择使用 gradle wrapper,什么时候选择使用本地 gradle?
    • Gradle 与 IDEA 整合
    • Gradle 进阶
    • Gradle 整合 SpringBoot
  • Java 进阶
  • Gradle
EasT-Duan
2024-09-05
目录

Gradle 入门

欢迎来到我的 ChatGPT 中转站,极具性价比,为付费不方便的朋友提供便利,有需求的可以添加左侧 QQ 二维码,另外,邀请新用户能获取余额哦!最后说一句,那啥:请自觉遵守《生成式人工智能服务管理暂行办法》。

# Gradle 简介

Gradle 是一款 Google 推出的基于 JVM、通用灵活的项目构建工具,支持 Maven,JCenter 多种第三方仓库;支持传递性 依赖管理、废弃了繁杂的 xml 文件,转而使用简洁的、支持多种语言 (例如:java、groovy 等) 的 build 脚本文件。 官网地址: https://gradle.org。

未来趋势会是 Gradle。

# 常见的项目构建工具

  • Ant: 2000 年 Apache 推出的纯 Java 编写构建工具,通过 xml [build.xml] 文件管理项目。
    • 优点:使用灵活,速度快 (快于 gradle 和 maven) 。
    • 缺点:Ant 没有强加任何编码约定的项目目录结构,开发人员需编写繁杂 XML 文件构建指令,对开发人员是一个挑战。
  • Maven: 2004 年 Apache 组织推出的再次使用 xml 文件 [pom.xml] 管理项目的构建工具。
    • 优点:遵循一套约定大于配置的项目目录结构,使用统一的 GAV 坐标进行依赖管理,侧重于包管理。
    • 缺点:项目构建过程僵化,配置文件编写不够灵活、不方便自定义组件,构建速度慢于 gradle。
  • Gradle: 2012 年 Google 推出的基于 Groovy 语言的全新项目构建工具,集合了 Ant 和 Maven 各自的优势。
    • 优点:集 Ant 脚本的灵活性 + Maven 约定大于配置的项目目录优势,支持多种远程仓库和插件,侧重于大项目构建。
    • 缺点:学习成本高、资料少、脚本灵活、版本兼容性差等。

# Gradle 安装

# Gradle 安装说明

先看 Spring 官网的说明。6.8 以下的版本是不可以使用的。具体的参考文档:Getting Started (spring.io) (opens new window)

# 配置环境变量

和 Maven 的配置一样,首先配置一个为 GRADLE_HOME 的 key,选择 Gradle 的根目录,然后在 Path 中配置 bin 目录即可。

重要:再配置一个GRALE_USER_HOME 环境变量

GRALE_USER_HOME 相当于配置 Gradle 本地仓库位置和 Gradle 。

# Gradle 项目目录结构

提示

  1. 只有 war 工程才有 webapp 目录,对于普通的 jar 工程并没有 webapp 目录 。

  2. gradlew 与 gradlew.bat 执行的指定 wrapper 版本中的 gradle 指令,不是本地安装的 gradle 指令哦。

# 创建 Gradle 项目

# 脚手架

借助于 spring 脚手架创建一个 gradle 项目。

# 命令行

创建一个文件夹,使用 cmd 进入文件夹中,执行 gradle init 命令,前提是需要配置好环境变量。

# Gradle 中的常用指令

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

注意

gradle 的指令要在含有 build.gradle 的目录执行。

# 修改 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/' }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 启用 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 接口。

# 仓库地址说明

  • mavenLocal (): 指定使用 maven 本地仓库,而本地仓库在配置 maven 时 settings 文件指定的仓库位置。如 E:/repository, gradle 查找 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 仓库中存放的方式。

# 阿里云仓库地址

使用指南 (opens new window)。可以直接复制阿里提供的 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/" }
        maven { name "Spring" ; url "https://maven.aliyun.com/repository/spring" }
        maven { name "Google" ; url "https://maven.aliyun.com/repository/google" }
        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/' }
            maven { name "Spring-Plugin" ; url 'https://maven.aliyun.com/repository/spring-plugin' }
            maven { name "Gradle-Plugin" ; url 'https://maven.aliyun.com/repository/gradle-plugin' }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# Wrapper 包装器

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

  • 对方电脑没有安装 gradle 。
  • 对方电脑安装过 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 指令。

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

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

具体操作如下:

gradle wrapper --gradle-version=4.4:升级wrapper版本号,只是修改gradle.properties中wrapper版本,未实际下载
gradle wrapper --gradle-version 5.2.1 --distribution-type all:关联源码用
1
2

# 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 的压缩包的
distributionUrl Gradle 发行版压缩包的下载地址

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

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

  • 下载别人的项目或者使用操作以前自己写的不同版本的 gradle 项目时:用 Gradle wrapper,也即:gradlew。
  • 新建一个项目时:使用 gradle 指令即可。
#Gradle
上次更新: 2025/04/12, 05:37:39
会话管理
Gradle 与 IDEA 整合

← 会话管理 Gradle 与 IDEA 整合→

最近更新
01
Reactor 核心
02-24
02
前置条件
10-30
03
计算机网络
09-13
更多文章>
Theme by Vdoing | Copyright © 2019-2025 powered by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式