当前位置: 首页 > 科技观察

为什么Spring官方推荐使用Gradle进行应用开发?以后Gradle更好

时间:2023-03-13 22:37:57 科技观察

Spring官方发表文章《??Spring/Spring Boot编译工具从Maven迁移到了Gradle??》解释为什么Spring(2012)和SpringBoot(2020)源码构建使用Gradle。迁移的主要原因是Gradle的构建速度比Maven快很多。最近,生成SpringBoot应用项目的网站SpringInitializr(start.spring.io)也开始使用Gradle作为默认的构建工具。这给习惯使用Maven的开发者带来了很多困惑和不以为然。你做了这个调整吗?Spring官方在SpringInitializr的githubissue上给出了答案。本期带大家阅读(https://github.com/spring-io/start.spring.io/issues/1012)。AndyWilkinson(SpringBoot首席开发人员)start.spring.io团队认为Gradle是当今开始新项目的任何人的更好构建系统。对于基于SpringBoot3.0的应用程序尤其如此,开发人员使用GradleforAOT(Spring6和SpringBoot3.0中的一项颠覆性新功能)的体验要好得多。我们希望推动社区使用Gradle,同时确保Maven对于那些喜欢它的人来说只需单击一下即可。Gradle是一个更好的构建系统提问者为什么你认为Gradle是一个更好的构建系统?在我看来,Maven更易于使用且不易混淆,尤其是对于初学者而言。为什么Gradle是一个更好的构建系统CédricChampeau(来自Oracle实验室,在Micronaut团队工作)为什么你认为Gradle是一个更好的构建系统?为了能够说什么是“更好”,我们需要具备更好的资格。我不会说Gradle肯定更好,但它确实在很多方面击败了Maven。当我们要比较的时候,我们应该尽量做到真实。在我看来,Maven更易于使用且不易混淆,尤其是对于初学者而言。我不同意这个观点,并认为Gradle在几个方面客观上比Maven更好。首先,我想每个人都同意Maven比Gradle使用更广泛。所以,有一个习惯偏见,你知道Maven作为一个工具,所以你可以“更容易”地使用它:你知道命令,你更习惯于阅读POM文件,等等。第二个偏见是Maven一直存在多年来,许多流程都是围绕Maven细节构建的。例如,人们很难停止对mvncleaninstall的调用,这并不奇怪。这是使用Maven工具的结果,如果您在安装前不进行清理,那么多年来该工具一直不可靠。当然,您会发现有人说“您不再需要清洁”,但这并不完全正确。Gradle没有这个问题,因为它是一个完全增量构建系统。在Gradle中,一切都声明了输入和输出,因此无论何时执行命令,Gradle都知道要重新执行或不执行什么,包括在需要时删除陈旧文件。Gradle还为Java(和Groovy)提供增量编译,以及避免编译(避免在下游项目没有更改的情况下重建)。一般来说,Gradle比Maven快得多,而且Gradle构建缓存让事情变得更加有趣。Gradle还修复了类路径污染等长期存在的问题。在构建结构方面,现代Gradle构建的设计明显优于旧版本。Gradle通过“有利于组合而不是继承”来修复臭名昭著的Maven单继承模型。Gradle还可以对其他插件的应用做出反应,使其具有高度的可组合性和可重用性。我什至没有提到可以测试您的构建逻辑本身这一事实,这是一个巨大的胜利。让我用Micronaut如何使用Conventions插件来说明Micronaut中的每个项目都配置相同而没有认知开销:一个项目说的是它是什么(BOM),而不是它是如何构建的。Gradle还非常注重开发人员的生产力。例如,持续监控源代码更改并立即重新执行任务(编译、测试)的连续模式是游戏规则的改变者。同样,与旧的但不错的SNAPSHOT相比,复合构建在多个库的集成方面改变了游戏规则。在依赖管理方面,Gradle也比Maven提供的(依赖约束、依赖验证、丰富的版本约束、模块替换、变体感知解决...)领先多年,可以解决现实世界的问题,但也支持更复杂的生态系统像Android或KotlinMPP。Gradle可以做得更好的另一个例子是插件作者。正如Andy所说,Gradle让我们作为插件作者的生活变得更加轻松,因为它没有Maven生命周期的约束。对于像本机构建这样的复杂主题,它需要与主要方法明显不同的东西,例如因为我们需要在JVM模式下运行测试,然后运行本机构建,然后在本机模式下运行测试,并使用以前的输出测试等。..Gradle模型显然更适合这个,并且不会强迫我们的插件作者将复杂的代码写入Maven的内部来完成这项工作。Gradle更容易。我知道改变会有很多阻力,但恕我直言,Gradle是未来。我也永远不会说学习曲线是平坦的:事实并非如此,特别是对于那些多年来一直深入研究Maven的人来说:Gradle的工作方式根本不同,但一旦你习惯了它,就很难回头了。当然,您会发现人们从Gradle回滚到Maven,这是不可避免的。长话短说:您会发现人们说Maven比Gradle更好。如果你这样做,请定义“更好”,因为我可以客观地找到Gradle更好的许多地方。我个人可以找到Maven“更好”的地方。例如,Maven使传递属性以覆盖构建的某些属性变得更加容易。然而,这通常与关于应该如何设计Gradle构建的“错误心态”有关(例如,人们习惯于使用Maven配置文件,而Gradle根本不需要它们)。或者,与Gradle相比,MavenAPI对插件作者的稳定性,Gradle发展迅速,每年出现一次故障(针对每个主要版本)。这对插件作者来说是一个痛点,但对通常不会被它打扰的用户来说却不是。我不会再进一步??了,因为有很多理由比Maven更喜欢Gradle。最后你还是选择留在Maven,我不会!结论Gradle更好,Gradle就是未来!随着SpringBoot3.0的到来,是时候一探究竟了!文章来自:热爱科学的卫斯理,如需转载本文,请即日联系热爱科学的卫斯理头条号。