前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Gradle 入门

Gradle 入门

作者头像
鱼找水需要时间
发布2023-02-16 18:40:51
7420
发布2023-02-16 18:40:51
举报
文章被收录于专栏:SpringBoot教程

1、Gradle 入

1.1 Gradle 简介

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

官网地址

Gradle有用吗?

  1. 目前已经有相当一部分公司在逐渐使用Gradle作为项目构建工具了
  2. 作为Java开发程序员,如果想下载Spring、SpringBoot等Spring家族的源码,基本上基于Gradle构建的

虽然目前市面上常见的项目构建工具有 Ant、Maven、Gradle,主流还是 Maven,但是未来趋势 Gradle

1.2 常见的项目构建工具

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 约定大于配置的项目目录优势,支持多种远程仓库和插件,侧重于大项目构建。 缺点:学习成本高、资料少、脚本灵活、版本兼容性差等。

1.3 Gradle 安装

SpringBoot 官方文档明确指出: Spring Boot的Gradle插件需要Gradle 6.8, 6.9或7.x 查看

其中 SpringBoot 与 Gradle 存在版本兼容问题,Gradle 与 Idea 也存在兼容问题,所以考虑到 java 程序员会使用 SpringBoot, 所以要选择 6.8 版本及高于 6.8 版本的 Gradle,那么相应的 idea 版本也要升级,不能太老.

通过idea安装根目录plugins\gradle\lib查看idea对应Gradle版本

1.3.1安装Gradle

安装Gradle需要安装jdk8或以上版本的jdk

下载Gradle并解压

1.3.2配置环境变量

接着再配置一个 GRALE_USER_HOME 环境变量:

GRALE_USER_HOME 相当于配置 Gradle 本地仓库位置和 Gradle Wrapper 缓存目录。所以我这里直接配置的maven仓库路径

1.4 检测是否安装成功

gradle -v 或者 gradle --version: 通过gradle -v或者 gradle --version检测是否安装成功

1.5 Gradle 项目目录结构

Gradle 项目默认目录结构和 Maven 项目的目录结构一致,都是基于约定大于配置。 其完整项目目录结构如下所示:

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

1.6 Gradle 中的常用指令

常用Gradle指令

作用

gradle clean

清楚build目录

gradle classes

编译业务代码和配置文件

gradle test

编译测试代码,生成测试报告

gradle build

构建项目

gradle build -x test

跳过测试,构建

1.7 修改 maven 下载源

认识 init.d 文件夹

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

在 init.d 文件夹创建 init.gradle 文件

代码语言:javascript
复制
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 文件的方法有:

  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接口。

仓库地址说明 使用M2_HOME()需要配置M2_HOME环境变量,值为maven根目录

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

1.8 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指令。

我们也可在终端执行 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 :关联源码用

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压缩包的

zipStroePath

同distributionPath,只不过是存放zip压缩包的

distributionUrl

Gradle发行版压缩包的下载地址

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

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

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

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

下载别人的项目或者使用操作以前自己写的不同版本的gradle项目时:用Gradle wrapper,也即:gradlew 什么时候使用本地gradle?新建一个项目时: 使用gradle指令即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Gradle 入
    • 1.1 Gradle 简介
      • 1.2 常见的项目构建工具
        • 1.3 Gradle 安装
          • 1.4 检测是否安装成功
            • 1.5 Gradle 项目目录结构
              • 1.6 Gradle 中的常用指令
                • 1.7 修改 maven 下载源
                  • 1.8 Wrapper 包装器
                  相关产品与服务
                  内容分发网络 CDN
                  内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档