从停用Maven,拥抱Gradle开始,学习SpringBoot

简介: 从停用Maven,拥抱Gradle开始,学习SpringBoot

前言

SpringBoot2.3一系列版本发布以来,有了很多的特性,比如优雅的关机。众多新的特性,代表作为公认的开源家族Spring来说,一直都在进步。那么我们就需要从变化中,汲取其中的养分和思考变化的原因。好了,回归今天的主题。一直关注提交者大佬的Twitter,近来大佬发的一个消息,比较震撼,也是一种信号。

image.png

大意为:在Spring Boot 2.3中,我们将构建从Maven迁移到了Gradle。如果您对我们进行更改的原因和方式感兴趣,我刚刚发布了一篇博客文章,其中包含一些详细信息:https://spring.io/blog/2020/06/08/migrating-spring-boot- s逐步构建……。现在,平均而言,CI构建速度提高了3到4倍,本地构建速度提高了20到30倍。正如大佬的评论区的疑问一样,我也有类似的疑问。

那么,就详细的看了下,对应的文章 https://spring.io/blog/2020/06/08/migrating-spring-boot-s-build-to-gradle  文章对疑问做了很好的诠释。

实实在在的变化

确实,在2.3.0.M1中对Spring Boot进行了相当重大的更改。这是使用Gradle而非Maven构建的项目的第一个版本。

为何切换

Spring Boot团队考虑改用Gradle的主要原因是为了减少构建项目所需的时间。在进行和测试更改时,反应链过长,等待构建完成所花费的时间增加了修复错误和实现新功能所花费的时间。在其他Spring项目中看到了Gradle的增量和并行构建的好处,在第三方项目中看到了Gradle的构建缓存的好处。希望可以在Spring Boot的构建中获得类似的好处。

过去,虽然曾尝试利用Maven对并行构建的支持。由于Spring Boot构建的复杂性,特别是对Invoker插件的使用,尝试失败。

Gradle具有构建结构的广泛模型,了解每个任务的输入和输出及其相互依赖性。这种建模的承诺是,它允许任务并行运行,同时也可以增量,缓存或完全避免。换句话说,Gradle旨在最小化构建任何给定更改并并行执行必需的工作所需的工作量。因此,需要使用到Gradle的优点,是切换的一大原因。

好处在哪

就减少项目的构建时间而言,将构建迁移到Gradle无疑是成功的。如上所述,在CI和开发人员自己的计算机上,基于Maven的完整构建都需要一个小时或更长时间。经过官方测试,Gradle的平均成功构建时间为9分22秒,如以下屏幕截图所示:

image.png

从图中,我们可以看到如此明显的提升。

如何切换

按照文章理解来,如下:

长久来,对Gradle的一种批评是,它导致的构建比基于Maven的构建更难以维护和理解。Gradle的灵活性使事情可以以不同的方式完成,即使是同一版本中的各个模块也是如此。如果切换成功,就需要避免这种情况。已经发布了四个Spring Boot 2.3里程碑,其候选发布版以及与Gradle一起发布的最终版本,看来已经成功了。在核心团队或其他任何贡献者中,还没有发现任何重大的构建问题。

Spring Boot的一个关键功能是约定优于配置,也将这种方法应用于构建。按照避免在build.gradle文件中包含命令式逻辑的建议,编写了几个可以在项目的buildSrc中找到的小插件。例如,有一个适用于每个Spring Boot启动器模块的启动器插件,以确保它们的配置,构建和发布都一致我们还有一个约定俗成的插件,可以对正在应用的其他插件做出反应,并配置诸如源代码编码,使用JUnit Platform以及使用-parameters进行编译等功能。

这种方法导致build.gradle文件几乎完全是声明性的。即使编写了许多插件来应用约定并填补Gradle生态系统中的空白,但迁移到Gradle的提交从代码库中删除了近9500行。

对于切换的过程,我们可以大致了解下,可以追溯历史,看到从2.3开始版本,开始使用Gradle构建。

总结思考

虽然CI构建效率大大相比Maven构建大大提升,也许会有小伙伴质疑,Spring Boot 迁移到了 Gradle,会不会对公司现有的 Maven 项目或者后续的版本升级造成影响呢?答案是否定的。

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

但是,按照技术人的思维来看,我们也需要去了解,学习Gradle的构建过程。在未来一刻,估计最后还是要拥抱Gradle。


目录
相关文章
|
3月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
10月前
|
监控 Java 应用服务中间件
微服务——SpringBoot使用归纳——为什么学习Spring Boot
本文主要探讨为什么学习Spring Boot。从Spring官方定位来看,Spring Boot旨在快速启动和运行项目,简化配置与编码。其优点包括:1) 良好的基因,继承了Spring框架的优点;2) 简化编码,通过starter依赖减少手动配置;3) 简化配置,采用Java Config方式替代繁琐的XML配置;4) 简化部署,内嵌Tomcat支持一键式启动;5) 简化监控,提供运行期性能参数获取功能。此外,从未来发展趋势看,微服务架构逐渐成为主流,而Spring Boot作为官方推荐技术,与Spring Cloud配合使用,将成为未来发展的重要方向。
408 0
微服务——SpringBoot使用归纳——为什么学习Spring Boot
|
10月前
|
Java Maven 微服务
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的 maven 依赖
在项目中使用Swagger2工具时,需导入Maven依赖。尽管官方最高版本为2.8.0,但其展示效果不够理想且稳定性欠佳。实际开发中常用2.2.2版本,因其稳定且界面友好。以下是围绕2.2.2版本的Maven依赖配置,包括`springfox-swagger2`和`springfox-swagger-ui`两个模块。
452 0
|
7月前
|
安全 Java 数据库
Spring Boot 框架深入学习示例教程详解
本教程深入讲解Spring Boot框架,先介绍其基础概念与优势,如自动配置、独立运行等。通过搭建项目、配置数据库等步骤展示技术方案,并结合RESTful API开发实例帮助学习。内容涵盖环境搭建、核心组件应用(Spring MVC、Spring Data JPA、Spring Security)及示例项目——在线书店系统,助你掌握Spring Boot开发全流程。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
1410 2
|
9月前
|
Java Spring
Spring框架的学习与应用
总的来说,Spring框架是Java开发中的一把强大的工具。通过理解其核心概念,通过实践来学习和掌握,你可以充分利用Spring框架的强大功能,提高你的开发效率和代码质量。
227 20
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
1099 1
Maven——创建 Spring Boot项目
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
456 1
如何使用 maven 创建一个 Spring Boot项目
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
348 9
|
前端开发 Java 数据库
SpringBoot学习
【10月更文挑战第7天】Spring学习
215 9
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。

推荐镜像

更多