spring boot放弃maven?

三丰 soft张三丰

Gradle、Ant和Maven的比较


ANT是最早的构建工具,基于idea,好象是2000年有的,当时是最流行java构建工具,不过它的XML脚本编写格式让XML文件特别大。对工程构建过程中的过程控制特别好。Maven它是用来给Ant补坑的,Maven第一次支持了从网络上下载的功能,仍然采用xml作为配置文件格式,它的问题是不能很好的相同库文件的版本冲突。Maven专注的是依赖管理,构建神马的并不擅长。Grale是一个自动化的构建工具,Gradle属于结合以上两个的优点,它继承了Ant的灵活和Maven的生命周期管理,它最后被google作为了Android御用管理工具。它最大的区别是不用XML作为配置文件格式,采用了DSL格式,使得脚本更加简洁。Gradle引入了基于Groovy语言的DSL语法来代替XML配置,因此它的配置文件是一个Groovy文件

项目自动构建的步骤


编译源代码 运行单元测试或者集成测试 生成执行分析的报告 创建发布版本 部署到目标环境

依赖配置


Ant处理依赖

Maven引入依赖


org.springframeworkspring-core
3.0.5.RELEASEorg.springframework spring-beans 3.0.5.RELEASE org.springframeworkspring-context 3.0.5.RELEASE junitjunit 4.9 test

代码生成在 Maven Dependencies

放在 .m/resportory/... 文件下

Gradle脚本处理依赖


dependencies { compile('org.springframework:spring-core:3.0.5.RELEASE') compile('org.springframework:spring-beans:3.0.5.RELEASE') compile('org.springframework:spring-context:3.0.5.RELEASE') testCompile('junit:junit:4.9') }

代码生成在依赖库里

放在.gradle文件下

构建生命周期


Ant也可以访问任何一部分构建,但是需要用n多个任务来实现而不是代码,所以还是不如Gradle强大。Maven提供有限的构建生命周期访问。插件可以连接到生命周期的特定阶段,而且只有在核心插件执行;不过也可以自己写插件完成特定生命周期操作,不过这个可不是一两天可以搞定的. Gradle很容易这方面NB,因为它可以轻松地访问任何生成的一部分,并允许用Groovy代码处理。

Gradle安装


下载地址http://services.gradle.org/distributions/ ,下载你所需要对应的版本,我这里下载的是gradle-4.7-bin.zip。下载后解压到你想要的目录即可,然后设置环境变量:

在cmd模式下查看,出现以下信息证明安装成功: gradle -v

然后我们可以在在环境变量里配置gradle默认的仓库地址(和maven不太一样):

IDE中的使用


IDEA


使用idea创建一个web的Gradle项目

然后对项目进行打包运行: 双击war 打包完成之后的war文件会在: 然后把war放入对应的tomcat目录即可,这里就不多解释了。

Eclipse


eclipse中要自己安装插件,插件路径为:http://download.eclipse.org/buildship/updates/e46/releases/2.x/ 。

为什么 Spring Boot 2.3.0 放弃Maven最终拥抱Gradle


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

Spring 的每个项目都独立的项目组在开发运营,在用户最常使用的白盒部分(例如 API 设计)保持一致性,对于用户不可见的黑盒部分,各个项目组选择自己适合工具没有统一的约定。

为什么要切换


Spring Boot 团队考虑由 Maven 切换到 Gradle 的主要原因为了减少构建项目所需的时间。在开发和测试过程中,等待构建完成所花费的时间增加了修复错误和实现新功能所花费的时间。

为了解决这个问题,团队曾尝试利用 Maven 对并行构建的支持。由于 Spring Boot 构建的复杂性,特别是对 Invoker 插件的使用,尝试失败。通过将构建分为四个部分来解决 CI 问题。首先构建项目的主要核心,然后并行构建三个独立的部分。但 CI 的构建仍需要一个小时或更长时间。此外,由于针对的是模块化 CI 构建,因此并没有使得开发人员本地构建效率有所改变。

如何切换


•Spring Boot 关键功能是约定优于配置,将这种方法应用于构建。避免在 build.gradle 文件中包含命令式逻辑,编写了几个可以在项目的中找到的小插件 buildSrc。

虽然现有 Gradle 生态系统对 Spring Boot 构建几乎空白,需要从头通过编写很多通用的 gradle 插件来应用到 Spring Boot,但迁移到 Gradle 的提交从代码库中删除了近 9500 行。

切换结果

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

如果对构建性能的更多细节感兴趣,可以在 Spring Boot 的公共Gradle Enterprise实例上获得更多数据。

对现有项目的影响


很多小伙伴可能要说,既然springboot的趋势是想切换的到gradle来,那么我目前手中的项目是用maven构建的,有何影响?虽然官方已经支持gradle了,但是目前使用的maven构建项目仍然可以继续使用,没有任何影响。或许你会像当初从eclipse转idea一样,爱上gradle了。