当前位置: 首页 > news >正文

Gradle(二)Gradle的优势、项目结构介绍

目录

    • 一、什么是 Gradle?
    • 二、为什么选择 Gradle?
    • 三、Gradle 的项目结构
      • 3.1 项目结构
      • 3.2 gradle wrapper 包装器
      • 3.3 settings.gradle 设置文件
      • 3.4 build.gradle 核心构建文件
        • 1)原始文件内容
        • 2)plugins 插件
        • 3)repositories:仓库源
        • 4)dependencies 依赖

大家都知道 Gradle 和 Maven 一样,是一个项目的构建工具。它通过任务来控制开发的进程,这些任务包括:编译打包、测试、部署发布 等。Gradle 诞生于 2008 年,仅仅比 Maven 晚 4 年。Android 也采用 Gradle 作为默认的构建工具。

本文希望通过以下的讲述,帮助你快速轻松的使用 Gradle 加速您的 Spring Boot 开发应用。

一、什么是 Gradle?

Gradle 是一款基于 Apache Ant 和 Maven 概念的现代化构建工具,它结合了前两者的优点,同时引入了基于 Groovy(现也支持 Kitlin)的领域特定语言(DSL),使得构建脚本更加简洁灵活。


二、为什么选择 Gradle?

2012年开始,Spring 框架已全部使用 Gradle 来构建;2020年开始,Spring Boot 也全部采用 Gradle 来构建。官方使用 Gradle 的主要原因还是 “构建项目花费更少的时间”。(可参考:Spring/Spring Boot编译工具从Maven迁移到了Gradle)

但对于我们普通的应用开发来说,Gradle 对于我们的优势在于:更简洁的代码和更丰富的功能。(可参考:Gradle大战Maven,胜负已分?)

在这里插入图片描述

最近的一些统计报告,越来越显示出 Gradle 有越来越多的人在使用它。

  • stackoverflow 的趋势报告:
  • OpenLogic 发布的《2022年度开源报告》

Spring 官方生成应用程序的网站:spring initializer(https://start.spring.io/),也已将默认的构建工具从 Maven 切换到了 Gradle。

在这里插入图片描述

综合上述种种,小编觉得有必要了解一下快速易用的 Gradle 了。


三、Gradle 的项目结构

3.1 项目结构

打开 https://start.spring.io/,生成演示项目,项目的结构如下所示:

在这里插入图片描述

  • springboot-grade:Spring Boot 项目的根目录,基于 Gradle 构建。
  • grade/wrapper/:Gradle 包装器,是 Gradle 提供的一个轻量级脚本工具,用于在不预先安装 Gradle 的情况下运行 Gradle 构建任务。
    • grade-wrapper.jar:Gradle Wrapper 的可执行 JAR 文件。
    • grade-wrapper.properties:配置 Wrapper 使用的 Gradle 版本等信息。
  • src/:项目源代码目录(未展开具体内容)。
  • .gitignore - Git 忽略规则文件。
  • build.gradle - 项目构建脚本。
  • gradlew / gradlew.bat - Gradle Wrapper 启动脚本(Unix/Windows)。
  • settings.gradle - 定义项目模块和名称。

3.2 gradle wrapper 包装器

Gradle Wrapper 是 Gradle 包装器,是 Gradle 提供的一个轻量级脚本工具,用于 在不预先安装 Gradle 的情况下运行 Gradle 构建任务。它允许开发者同一项目的构建环境,避免因本地 Gradle 版本不同导致的构建问题。

可以直接通过 gradle wrapper 脚本对程序进行编译、打包、测试、部署和发布等任务操作。

  • gradlew:是针对 List/MacOS 的 gradle wrapper;
  • gradlew.bat:是针对 Windows 的 gradle wrapper。

补充:如何加速 gradle wrapper 的下载速度?

gradle wrapper 会自动下载 gradle,若默认的下载 gradle 的 url 网速很慢,可以替换成阿里云或腾讯云的地址。当然可以是你公司内部的文件下载地址。

我们在 gradle/wrapper/gradle-wrapper.propertiesdistributionUrl 类配置:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

若使用阿里云的地址加速(列表页面:https://mirrors.aliyun.com/macports/distfiles/gradle/),配置如下:

distributionUrl=https\://mirrors.aliyun.com/macports/distfiles/gradle/gradle-7.5.1-bin.zip

若使用腾讯云的地址加速(列表页面:https://mirrors.cloud.tencent.com/gradle/),配置如下:

distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.5.1-bin.zip

3.3 settings.gradle 设置文件

本文件配置构建项目所需要的信息,Spring Boot 项目的该文件内容很简单:

rootProject.name = 'gradle-demo'

此项是为了配置编译之后文件的名字。

3.4 build.gradle 核心构建文件

1)原始文件内容

生成的 build.gradle 的文件内容如下:

plugins {id 'org.springframework.boot' version '2.7.5'id 'io.spring.dependency-management' version '1.0.15.RELEASE'id 'java'
}group = 'top.wisely'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'configurations {compileOnly {extendsFrom annotationProcessor}
}repositories {maven { url 'https://maven.aliyun.com/repository/public/' }maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }mavenCentral()
}dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'testImplementation 'org.springframework.boot:spring-boot-starter-test'
}tasks.named('test') {useJUnitPlatform()
}
2)plugins 插件
  • plugins {...}:插件部分,声明了 plugins 的依赖。核心插件只需要使用 id 简称即可,社区插件需要使用全名称的 id。
    • id 'org.springframework.boot' version '2.7.5':社区插件,Spring Boot Gradle 插件,它为我们提供 Spring Boot 运行、创建可执行 jar 包或者 war 包的能力。
    • id 'io.spring.dependency-management' version '1.0.15.RELEASE':社区插件,Spring Boot 依赖管理插件,它为我们提供对项目直接或间接依赖的库的版本控制,这些都是 Spring Boot 做过兼容性测试的版本。
    • id 'java':核心插件:Java 插件将 Java 编译以及测试等功能添加到项目中。
3)repositories:仓库源
  • repositories {...}:仓库源,配置了下载依赖包的地址。
    • mavenCentral():Gradle 默认使用 Maven 的中心库下载依赖包。
    • maven { url 'https://maven.aliyun.com/repository/public/' }:也可以通过阿里云的 Maven 镜像库来加速。
    • maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }:或者通过腾讯云的 Maven 镜像库来加速。
4)dependencies 依赖
  • dependencies {...}:依赖信息。

    • implementation:普通依赖。

      我们只需要按照下面的格式即可引入依赖:

      implementation group: '***', name: '***', version: '***'
      

      或简写成:

      implementation 'group:name:version'
      

      因为使用了 Spring Boot 依赖管理插件,只要被 Spring Boot 所管理的依赖,版本无须维护,可以更加精简地写成:

      implementation 'group:name'
      

      所以 Spring Boot 所管理的依赖样子一般为:

      dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'// ...
      }
      

在我们绝大部分时间,我们和 Gradle 做依赖相关的工作,在了解这些后都能解决了。

我们可以通过 https://mvnrepository.com/ 网站查找添加依赖,我们在依赖中选中 Gralde 来复制内容到我们的依赖中:

在这里插入图片描述

注意,一般情况下,我们会把复制来的版本号给去掉,以防 Spring Boot 已经对它做了版本管理,这样我们就能直接下载兼容性良好的依赖包;如果去掉版本号后不能下载依赖包,意味着 Spring Boot 没有做该包的版本管理,这是我们按照自己的需要添加合适的版本号。

  • testImplementation:测试依赖
    • testImplementation 'org.springframework.boot:spring-boot-starter-test':测试相关的依赖,使用 testImplementation,规则和普通依赖一致。
  • compileOnly:编译依赖
    • compileOnly 'org.projectlombok:lombok':只在编译期生效的依赖。
  • runtimeOnly:运行时依赖
    • runtimeOnly 'com.mysql:mysql-connector-j':旨在运行时起效的依赖。

由上述比较,我们发现Gradle有明显于Maven的优势。我提出下面的建议:

1、新项目尝试使用Gradle来构建!

2、尝试迁移Maven的老项目将其使用Gradle构建。(如:Spring/Spring Boot编译工具从Maven迁移到了Gradle「官网翻译」)

不愿迁移的理由很多:

1、对于Maven很熟悉了,不用迁移到新的工具!

2、又要学习一个新东西,卷不动了!

我觉得无论作为什么样的职业,对新的东西要保持敏锐的感知和学习,不要停留在自己舒适的区域,无论Gradle有没有那么优秀,或者有没有那么多问题,我们要坚持尝试一下。

最后送给大家一句话:

“I can’t understand why people are frightened of new ideas. I’m frightened of the old ones.” — John Cage
“我不明白为什么人们害怕新想法。 我害怕那些旧的。” - 约翰凯奇。

勇敢迈出舒适区,去冒险吧!

整理完毕,完结撒花~ 🌻





参考地址:

1.使用Gradle全面加速Spring Boot开发,https://zhuanlan.zhihu.com/p/578972804

http://www.lryc.cn/news/619133.html

相关文章:

  • python2操作neo4j
  • HTTPS加密与私有CA配置全攻略
  • spring-cloud整合nacos详细攻略
  • 读《精益数据分析》:UGC平台的数据指标梳理
  • 11-docker单机版的容器编排工具docker-compose基本使用
  • 数据分析专栏记录之 -基础数学与统计知识
  • Threejs 设置灯光照射点位置 辅助器不跟随移动
  • 大数据中的数据压缩原理
  • QT第五讲-控件QLineEdit、QSpinBox、QSlider、QScrollBar、QDial、QProgressBar、QLCDNumber
  • 计算机网络摘星题库800题笔记 第4章 网络层
  • 前端最新Vue2+Vue3基础入门到实战项目全套教程,自学前端vue就选黑马程序员,一套全通关!笔记
  • MCU中的液晶显示屏LCD(Liquid Crystal Display)控制器
  • VUE的8个生命周期
  • C++list(2)
  • 【JavaEE】多线程之线程安全(上)
  • 串口通信学习
  • 【PyTorch学习笔记 - 03】 Transforms
  • Spring-Cache 缓存数据
  • Dubbo 3.x源码(33)—Dubbo Consumer接收服务调用响应
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:UART Controller,通用异步收发传输器控制器
  • I2C 接收与发送数据的流程
  • 成都影像产业园实训考察:重庆五一职院关注技能就业
  • 【DL】深层神经网络
  • 《疯狂Java讲义(第3版)》学习笔记ch1
  • 力扣 hot100 Day71
  • 【1】Transformers快速入门:自然语言处理(NLP)是啥?
  • 机器学习第十课之TF-IDF算法(红楼梦文本分析)
  • LangChain SQLChatMessageHistory:SQL数据库存储聊天历史详解
  • 混合精度加快前向传播的速度
  • 计算机视觉(8)-纯视觉方案实现端到端轨迹规划(模型训练+代码)