目录

    • 一、什么是 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.pswp.cn/bicheng/93008.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93008.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/93008.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习-决策树(上)

决策树构建: 决策树的结构与python中的二叉树结构(PY数据结构-树)相似,不过决策树中除了叶节点之外的其他节点,都被称之为“决策节点”,构建决策树的过程,也就是选取每一个节点采用哪一个特征作为划分依据的过程。 以…

一周学会Matplotlib3 Python 数据可视化-绘制直方图(Histogram)

锋哥原创的Matplotlib3 Python数据可视化视频教程: 2026版 Matplotlib3 Python 数据可视化 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程讲解利用python进行数据可视化 科研绘图-Matplotlib,学习Matplotlib图形参数基本设置&…

uni-app之删除没用的文件,搭建页面

文章目录一、初始化项目1.1 初始化index.vue1.2 删除无用文件1.3 初始化后的目录结果如下二、文件目录分析2.1 核心文件2.2 关键文件夹​2.3 其他文件2.4 注意事项​​三、创建页面(pages)3.1 创建home页面3.2 创建其他页面3.3 查看pages.json3.4 删除index页面和pages.json的配…

99、【OS】【Nuttx】【构建】cmake 配置实操:问题解决

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除 背景 接之前 blog 【OS】【Nuttx】【构建】cm…

2007-2023年各省环境保护支出统计数据

数据介绍 环境保护支出是指政府和企业为改善生态环境质量、防治污染、保护自然资源所投入的资金,涵盖污染防治、生态修复、环境管理等多方面。污染防治支出、生态保护支出、环境管理事务、资源节约与循环利用等,当前环保支出仍面临区域不平衡、隐性债务…

PyCharm(2025.1.3.1)绑定 Conda 环境

1. Pycharm 右下角,选择( 如图所示 )2. Path to conda 这里选择如图所示的这个文件( 在你下载的 Anaconda 文件里 ),之后在 Enviroment 中就可以看到你新创建的环境了

Liunx文件系统详解

目录 1.磁盘 1.1 概念 1.2 磁盘物理结构 1.3 磁盘的存储结构 1.4 磁盘的逻辑结构 1.5 CHS && LBA地址 2.基础文件系统 2.1 块 ​编辑 2.2 分区 2.3 inode 3.ext2 ⽂件系统 3.1 宏观认识 3.2 Block Group 3.3块组内部构成 3.3.1 超级块(Supe…

Mac如何安装telnet命令

Mac如何安装telnet命令_mac telnet-CSDN博客

【SpringBoot】持久层 sql 注入问题

目录 概述 #{} 与 ${} 概述 前端恶意传参,改变后端 sql 语句的语法结构,从而使后端给前端返回一些私密的数据。这种安全问题往往是因为没有严格过滤参数,或者后端代码不严谨导致的。 #{} 与 ${} 在 MyBatis 框架中,#{} 与 ${} 都…

怎么写好汉语言文学专业的论文?

磨刀不误砍柴功, 前期多看文章和文献,吸取写作经验,写作过程会更加顺利噢!看到最后,相信你能得到收获! 写汉语言专业论文并不难,从选题、资料准备、框架搭建、正文写作、修改定稿五个核心环节展…

MySQL User表入门教程

一、User表概述 MySQL的user表位于mysql系统数据库中,是MySQL权限系统的核心,用于存储用户账户信息、认证方式和全局权限。通过操作此表,可实现用户创建、权限分配及安全审计。 二、User表核心字段解析字段名作用示例值Host用户允许连接的主机…

[NPUCTF2020]这是什么觅

题目是一个文件,我们先以记事本打开一下,开头就是PK,基本可以确定这是一个 ZIP 格式的压缩包​,不确定可以用winhex打开:​50 4B 03 04开头则 100% 是 ZIP 文件。改一下后缀之后解压得到一张图片上面是日期&#xff0c…

每日任务day0812:小小勇者成长记之挤牛奶

清晨,薄雾还缭绕在草地上,小小勇者背着编织篮子来到农场。奶牛们低头咀嚼,尾巴轻轻拍打着苍白的露珠。老人微笑着递给他一只温热的牛奶罐,说:“第一次要慢,别惊扰它们。”勇者学着老人弯下身,温…

IIS 多用户环境中判断服务器是否为开发用电脑,数据状态比较

如果只需要在 IIS 多用户环境中判断服务器是否为开发用电脑(一个固定状态,通常不会动态切换),代码可以进一步简化。这种场景下,状态一般是启动时确定的(如通过配置文件或环境变量),后…

P2865 [USACO06NOV] Roadblocks G

思路:严格次短路,在任何情况下如果发现一条从1到i的路,都有以下情况:1.该路径小于当前1到i的最短路,将最短路替换2.该路径长度等于当前最短路,舍去3.该路径大于最短路且小于次短路,将此路径替换…

基于Hadoop的汽车价格预测分析及评论情感分析可视化系统

文章目录有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主一、项目背景二、项目目标三、系统架构四、功能模块五、创新点六、应用价值与前景每文一语有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 一、项目背景 近年…

gpt-5与gpt-5-fast

简单来说: GPT-5 → 追求最高质量的推理,输出会更细致、更准确,尤其适合需要深度思考、长链推理、严谨分析的任务(比如复杂代码调试、长文档推理、系统设计)。速度相对慢一些。GPT-5-fast → 追求更高的响应速度&#…

Mybatis源码解读-SqlSession 会话源码和Executor SQL操作执行器源码

相关流程图整理元数据简略图执行流程图一级缓存、二级缓存设计与查询流程分析图一级缓存设计-类图一级缓存工作流程图二级缓存设计-类图二级缓存工作流程图元数据简略图 执行流程图 一级缓存、二级缓存设计与查询流程分析图 一级缓存设计-类图 一级缓存工作流程图 二级缓存设计…

使用Excel制作甘特图

最终效果:专业的项目管理团队通常会使用project制作甘特图,但是很多人没接触过这个软件,另外project制作的甘特图并不适合放在PPT中展示。由于Excel图表的数据标签无法准确识别月初和月末,如果使用原始数据直接做的效果是这样的&a…

超详细基于stm32hal库的esp8266WiFi模块驱动程序(可直接移植)

目录 前言: 1 前期准备 1.1 了解mqtt通信协议 1.1.1核心组件 1.2 ESP8266固件烧录 1.3 启动EMQX服务器 1.3.1大概了解emqx的使用 2 驱动代码讲解应用 2.1 硬件接线 2.2 AT指令 2.3 驱动代码 2.4 效果展示 前言: esp8266支持mqtt通信协议&…