在国外某社交网站上有一个关于迁移 Spring Boot 迁移 Maven 至 Gradle 的帖子:

该贴子上也有很多人质疑:Maven 用的好好的,为什么要迁移至 Gradle?

虽然该贴子只是说 Gradle 牛逼,但并没有说迁移至 Gradle 所带来的影响和价值。

所以,Spring Boot 官方对此也发了博文作了解释:

https://spring.io/blog/2020/06/08/migrating-spring-boot-s-build-to-gradle

栈长简单概括一下。

没错,Spring Boot 做了一个重大调整:

在 Spring Boot 2.3.0.M1 中,将首次使用 Gradle 代替 Maven 来构建 Spring Boot 项目。

为什么要迁移?

Spring Boot 团队给出的主要原因是,迁移至 Gradle 可以减少构建项目所花费的时间

因为使用 Maven 构建,回归测试时间太长了,等待项目构建大大增加了修复 bug 和实现新特性的时间。

而 Gradle 的宗旨是减少构建工作量,它可以根据需要构建任何有变化的地方或者并行构建。

当然,Spring Boot 团队也花了很多时间来尝试用 Maven 进行 并行构建,但因为构建 Spring Boot 项目的复杂性,最终失败了。

另外,Spring Boot 团队也看到了在其他 Spring 项目中使用 Gradle 以及并行构建所带来的提升,并且还可以使用 Gradle 在一些第三方项目上的构建缓存,这些优势都促使 Gradle 带到构建 Spring Boot 项目中来。

迁移有什么好处?

栈长使用 Maven,哪怕只改一个代码也是构建全部,构建项目确实要花不少时间。

Spring Boot 官方也给出了数据,一次完整的 Maven 项目构建一般需要一个小时或者以上,而在过去的 4 周时间内,使用 Gradle 构建的平均时间只用了 9 分 22 秒!!!

如下面截图所示:

光从构建时间来看,效率真是倍数级的。

https://github.com/spring-projects/spring-boot/tree/v2.3.0.RELEASE

栈长特意去看了下,在 Spring Boot 2.2.8 中使用的是 Maven:

而最新发布的 Spring Boot 2.3.1 已经是切换到 Gradle 了:

会带来什么影响?

也许会有小伙伴质疑,Spring Boot 迁移到了 Gradle,会不会对公司现有的 Maven 项目或者后续的版本升级造成影响?

如果你只是使用 Spring Boot 框架来搭建系统,那还是可以继续使用 Maven 来管理依赖的,Spring Boot 会继续在 Maven 中央仓库提交。

如下面所示:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>

因为当版本确定之后,这个 Maven 构建只是一次性的,不会影响 Spring Boot 团队的日常迭代效率。

但是,如果我们需要在本地构建 Spring Boot 源码,或者你正在学习最新 Spring Boot 源码,就需要掌握 Gradle 构建了。

题外话,Gradle 肯定是未来的趋势,但也不一定非得迁移至 Gradle,只有适合自己的才是最好的,毕竟现在 Maven 和 Gradle 都是主流,但是 Maven 更占有市场,很多主流开源项目都是以 Maven 依赖来作为示例演示的。

栈长也会陆续关注 Spring Boot 动态,后续也会给大家带来各方面的教程,获取历史教程可以在Java技术栈公众号后台回复:boot,掌握 Spring Boot 问题不大。

学习、从不止步。

推荐去我的博客阅读更多:

1.Java JVM、集合、多线程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、后端、架构、阿里巴巴等大厂最新面试题

觉得不错,别忘了点赞+转发哦!

Spring Boot 把 Maven 干掉了,拥抱 Gradle!的更多相关文章

  1. Spring Boot 中使用 spring-boot-devtools (使用 Gradle 作为构建工具)

    Spring Boot 中使用 spring-boot-devtools (使用 Gradle 作为构建工具) 本文使用 Gradle 作为构建工具,关于 Gradle 构建工具,可以理解为是 Mav ...

  2. Spring boot项目maven的profile多环境配置不自动替换变量的问题解决

    Spring boot项目maven的profile多环境配置不自动替换变量的问题解决   在网上找了好久,配置都很简单,可是我的程序就是不能自动替换变量,最终单独测试,发现原来是引用spring b ...

  3. Spring Boot使用Maven打包替换资源文件占位符

    在Spring Boot开发中,通过Maven构建项目依赖是一件比较舒心的事,可以为我们省去处理冲突等大部分问题,将更多的精力用于业务功能上.近期在项目中,由于项目集成了其他外部系统资源文件,需要根据 ...

  4. Spring Boot的Maven插件Spring Boot Maven plugin详解

    Spring Boot的Maven插件(Spring Boot Maven plugin)能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行Mave ...

  5. spring boot和maven的约定大于配置体现在哪些方面

    spring boot和maven的约定大于配置体现在哪些方面? 两者都遵从了约定大于配置的路线 约定优于配置体现点: 1.maven的目录文件结构 1)默认有resources文件夹,存放资源配置文 ...

  6. spring Boot + MyBatis + Maven 项目,日志开启打印 sql

    在 spring Boot + MyBatis + Maven 项目中,日志开启打印 sql 的最简单方法,就是在文件 application.properties 中新增: logging.leve ...

  7. [Java] Spring boot 的maven设置阿里云仓库

    Spring boot 的maven设置阿里云仓库 打开根目录下的 pom.xml 文件,在对应为止出加入如下 红色 代码: <build> <plugins> <plu ...

  8. Spring Boot 的Maven多模块开发web项目使用外部容器进行部署

    Spring Boot中自带有Tomcat容器,因此Spring Boot项目只需要运行main函数,就可以运行,但是以往的web项目,我们习惯于使用自己安装的Tomcat运行或者使用Tomcat.J ...

  9. Spring Boot 使用maven打包成jar

    1.application.properties加入如下配置 server.port= 2.修改pom.xml <?xml version="1.0" encoding=&q ...

随机推荐

  1. get_client_ip()

    get_client_ip()获取ip地址,在开启IPv6协议的主机上会全部返回0.0.0.0原因是他会把ipv6地址认为是非法地址而转换成0.0.0.0,而ipv4地址在ipv6主机上用get_cl ...

  2. MSC添加shard节点

    1.MSC添加shard节点 mkdir -p /mongodb/38027/conf  /mongodb/38027/log  /mongodb/38027/datamkdir -p /mongod ...

  3. Django创建应用以及路由的配置

    Django简介:是一个开放源代码的web 应用框架,由python 写成.初次发布于2005年7月,并于2008年9月发布了第一个正式版本1.0. 文件说明:manage.py:一个命令行工具,可以 ...

  4. 如何管理win系列服务器,win10 pro如何 使用远程桌面

    远程桌面,大家都理解,专业的运维人员都是连接上百台服务器进行操作管理工作. 先介绍一款专业的远程桌面管理工具:iis7远程桌面批量管理  win10 pro如何 使用远程桌面? 一. 首先在win10 ...

  5. itext7史上最全实战总结

    1. itext7史上最全实战总结 1.1. 前言 最近有个需求需要我用Java手动写一份PDF报告,经过考察几种pdf开源代码,最终选取了itext7,此版本为7.1.11,由于发现网上关于该工具的 ...

  6. Rocket - tilelink - TLBusWrapper.to

    https://mp.weixin.qq.com/s/jSnhBzU5_ayQCg5fWAcx-g 简单介绍TLBusWrapper.to()的实现.主要介绍确定this{...}对应代码的过程. 1 ...

  7. Rocket - tilelink - Nodes

    https://mp.weixin.qq.com/s/KJ8pVH76rdxPOZ1vE3QlKA   简单介绍tilelink对Diplomacy Nodes的实现.   ​​   1. TLImp ...

  8. Rocket - tilelink - Bundles

    https://mp.weixin.qq.com/s/jrqBg2AIpQogBrpwNXjmwg   简单介绍Bundles文件中对TileLink规范(1.7.1)的定义. 参考链接:https: ...

  9. 【Flume】安装与测试

    1.下载安装包http://archive.apache.org/dist/flume/ 2.解压命令tar -zxvf 压缩包 -C 路径 3.配置环境变量 export FLUME_HOME=/o ...

  10. Java实现 洛谷 多项式输出

    题目描述 一元nn次多项式可用如下的表达式表示: 其中,a_ix^ia i ​ x i 称为ii次项,a_ia i ​ 称为ii次项的系数.给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求 ...