[springboot]菜鸟笔记20230607-gradle和maven

    在springboot官网的入门指南中,专门有两个小专题分别用gradle和maven来构建java项目,在本文中,将浅浅总结下这两种工具的灵活性、性能、社区、用户体验、插件、缓存和版本控制、依赖管理等方面的共性和区别。

Gradle

Gradle是一种基于JVM的构建工具,可用于构建和管理任何类型的应用程序。它使用Groovy或Kotlin语言编写构建脚本,并使用声明性语言来定义项目的依赖关系、构建任务和构建过程。Gradle还支持插件和扩展,使它可以与其他工具和框架集成。Gradle被广泛用于Android应用程序的构建和管理,也可用于构建Java、Kotlin、Groovy和其他语言的项目。

Maven

Maven是一个Java项目的自动化构建工具。它使用了一个中央信息管理的文件(pom.xml),其中包括项目的构建信息、依赖关系和其他配置信息。Maven能够自动下载所需的库文件并进行编译、测试、打包、发布等一系列操作。由于Maven规范化的构建过程和简化的项目管理,使得它成为Java开发中非常流行的工具。

灵活性

谷歌选择Gradle作为Android的官方构建工具,不是因为构建脚本是代码,而是因为Gradle以一种最基本可扩展的方式建模。Gradle的模型还允许使用C/C++进行本地开发,且可以扩展到任何生态系统。例如,Gradle在设计时就考虑了使用它的工具API来嵌入。
Gradle和Maven都提供了优于配置的约定。然而,Maven提供了一个非常严格的模型,使得自定义变得冗长,有时甚至不可能。虽然这样可以更容易地理解任何给定的Maven构建,但只要您没有任何特殊需求,它也使它不适合许多自动化问题。另一方面,Gradle是考虑到授权和负责任的用户而构建的。

Maven使用XML作为配置文件,而Gradle使用Groovy或Kotlin作为配置文件。Groovy和Kotlin都是基于Java的编程语言,因此Gradle的DSL更加灵活和易于学习。

性能

缩短构建时间是加快发布速度的最直接方法之一。Gradle和Maven都采用了某种形式的并行项目构建和并行依赖解析。最大的不同在于Gradle的工作回避和递增机制。Gradle使用增量构建,只对发生更改的部分进行构建,让Gradle比Maven快得多。

Gradle和Maven用户都可以利用Gradle Enterprise中提供的构建缓存技术。Gradle用户通常会体验到大约50%的额外构建时间减少,而Maven用户通常会体验到大约90%的额外构建时间减少。

社区

Maven有更广泛的用户群体和更多的插件,Gradle的用户群体还在增长中。

用户体验

Maven诞生的更早,有着更长的使用期限,意味着它通过ide提供的支持对许多用户来说更好。不过,Gradle对IDE的支持也在快速改进。例如,Gradle现在有一个基于kotlin的DSL,它提供了更好的IDE体验。Gradle提供了一个现代的CLI,它具有可发现的功能,如“Gradle tasks”,以及改进的日志记录和命令行完成功能。Gradle还提供了一个交互式的基于web的UI来调试和优化构建:Build Scan™。这些也可以在内部托管,以允许组织收集构建历史并进行趋势分析,比较构建以进行调试,或优化构建时间。

插件

Gradle具有与Maven相同的插件系统,但Gradle的插件更易于使用和配置。Gradle插件还支持多语言和多平台

缓存和版本控制

Maven在本地和远程维护缓存,而Gradle依赖本地缓存,在版本控制系统中维护依赖项。这意味着在生成过程中更改依赖项版本不会丢失。

依赖管理

这两个构建系统都提供了内置功能来解析来自可配置存储库的依赖项。两者都能够在本地缓存依赖项并并行下载它们。

作为库消费者,Maven允许重写依赖项,但只能通过版本。Gradle提供了可定制的依赖项选择和替换规则,这些规则可以声明一次,并在项目范围内处理不需要的依赖项。这种替代机制使Gradle能够一起构建多个源项目来创建复合构建。

Maven只有很少的内置依赖作用域,这在使用测试fixture或代码生成等常见场景中会导致模块架构的尴尬。例如,单元测试和集成测试之间没有分离。Gradle允许自定义依赖范围,这提供了更好的建模和更快的构建。

Maven依赖冲突解决使用最短路径,这受到声明顺序的影响。Gradle会完全解决冲突,选择图中依赖项的最高版本。此外,在Gradle中,你可以严格地声明版本,这允许它们优先于可传递版本,从而允许降级依赖。

作为一个库生产者,Gradle允许生产者声明“api”和“implementation”依赖,以防止不需要的库泄漏到消费者的类路径中。Maven允许发布者通过可选的依赖项提供元数据,但只能作为文档。Gradle完全支持特性变体和可选依赖。

总结

总的来说,Gradle比Maven更灵活,更快,更适合大型,复杂的项目。但是,选择Gradle还是Maven取决于个人需求和团队的习惯。

你可能感兴趣的:(springboot,java,spring,boot,笔记)