Gradle 入门概念和Mac 安装Gradle

Gradle 简介

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

官网地址 : https://gradle.org/

常见的构建工具

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 和 Java版本对应关系

Java versionFirst Gradle version to support it
82.0
94.3
104.7
115.0
125.4
136.0
146.3
156.7
167.0
177.3
187.5
197.6

Mac 安装(使用Homebrew安装)

  • 安装gradle
# 安装
brew install gradle
  • 查看安装的版本号(检测是否安装成功)
gradle --version

在这里插入图片描述

  • 查看安装的目录
brew list gradle

在这里插入图片描述

配置环境变量

查看当前(shell)

~/.bash_profile 是 Bash Shell 的配置文件,而 ~/.zshrc 是 Zsh Shell 的配置文件。这些文件用于配置各自的环境变量、别名、函数和其他 Shell 相关的设置。

  • ~/.bash_profile:Bash Shell 在登录时会加载该文件。它适用于 macOS 默认的终端应用程序 Terminal,默认使用的是 Bash Shell。

  • ~/.zshrc:Zsh Shell 在启动时会加载该文件。Zsh 是一种功能强大且高度可定制的 Shell,可以替代默认的 Bash Shell。在最新版本的 macOS(如 macOS Catalina 和 Big Sur)中,默认终端应用程序已经切换到使用 Zsh Shell。

如果正在使用默认的终端应用程序,并且没有手动更改 Shell,那么 ~/.bash_profile 文件将会被加载。但是,如果已切换为 Zsh Shell,那么应该编辑 ~/.zshrc 文件来配置环境变量和其他 Shell 相关设置。

根据当前使用的 Shell 来选择相应的配置文件进行编辑,以便设置 GRADLE_HOME 环境变量或其他需要的配置。

echo $SHELL

# 在终端中运行此命令后,会显示所使用的 shell 的路径。例如,如果输出是 `/bin/bash`,则表示当前使用的是 Bash Shell;如果输出是 `/bin/zsh`,则表示当前使用的是 Zsh Shell

bash shell 则使用配置文件: ~/.bash_profile
Zsh Shell 则使用配置文件: ~/.zshrc

在这里插入图片描述


# 添加 gradle本地仓库地址
export GRADLE_USER_HOME=/Users/mi/development/maven/repository

# gradle 安装地址(终端执行 gradle --version 有输出的话,就不需要配置)
# export GRADLE_HOME=/opt/homebrew/Cellar/gradle/8.2.1
  • 重新加载配置文件
# 
# bash shell 则使用: source ~/.bash_profile
# Zsh Shell 则使用: source ~/.zshrc

在这里插入图片描述

Gradle 项目目录结构

Gradle 项目默认目录结构和 Maven 项目的目录结构一致,都是基于约定大于配【Convention Over Configuration】。
其完整项目目录结构如下所示:
在这里插入图片描述

创建Gradle 项目

借助于 spring 脚手架创建 gradle 第一个项目:https://start.spring.io/
在这里插入图片描述

生成的目录结构如下所示

在这里插入图片描述

修改 maven 下载源

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

我们可以在 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:启用 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接口。

拓展 2:仓库地址说明

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

拓展 3:阿里云仓库地址请参考:https://developer.aliyun.com/mvn/guide

Wrapper 包装器

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

问题。例如:把自己的代码共享给其他人使用,可能出现如下情况:
1.对方电脑没有安装 gradle
2.对方电脑安装过 gradle,但是版本太旧了

这时候,我们就可以考虑使用 Gradle Wrapper 了。这也是官方建议使用 Gradle Wrapper 的原因。实际上有了 GradleWrapper 之后,我们本地是可以不配置 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 wrapper --gradle-version=4.4:升级wrapper版本号,只是修改gradle.properties中wrapper版本,未实际下载

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

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 文件解读
在这里插入代码片

在这里插入图片描述

在这里插入图片描述

注意:

前面提到的 GRALE_USER_HOME 环境变量用于这里的 Gradle Wrapper 下载的特定版本的 gradle 存储目录。如果我们没有配置过 GRALE_USER_HOME 环境变量,默认在当前用户家目录下的.gradle 文件夹中。
那什么时候选择使用 gradle wrapper、什么时候选择使用本地 gradle?
下载别人的项目或者使用操作以前自己写的不同版本的gradle项目时:用Gradle wrapper,也即:gradlew什么时候使用本地gradle? 新建一个项目时: 使用gradle指令即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值