目录
- Gradle
- 为什么选择Gradle?
- 支持的语言和框架
- 兼容的集成开发环境
- 许可证
- 兼容性
- Java
- Kotlin
- Groovy
- Android
- Gradle 与 Maven 比较
- 灵活性
- 性能
- 用户体验
- 依赖管理
个人主页: 【⭐️个人主页】
需要您的【💖 点赞+关注】支持 💯
Gradle
【官网指南】:https://docs.gradle.org/current/userguide/userguide.html
Gradle 构建工具是一款
快速
、可靠
且适应性强
的开源
构建自动化工具
,具有优雅且可扩展的``声明式构建
语言。
为什么选择Gradle?
Gradle 是一个广泛使用且成熟的工具,拥有活跃的社区和强大的开发者生态系统。
- Gradle 是 JVM 上最流行的构建系统,也是 Android 和 Kotlin 多平台项目的默认系统。 它拥有丰富的社区插件生态系统。
- Gradle 可以使用其
内置功能
、第三方插件
或自定义构建逻辑
自动执行各种软件构建场景。 - Gradle 提供了一种
高级
、声明式
和富有表现力
的构建语言
,使读取和编写构建逻辑变得容易。 - Gradle
速度快
、可扩展
,可以构建任何规模和复杂性的项目。 - Gradle 可生成可靠的结果,同时受益于
增量构建
、构建缓存
和并行执行
等优化。
Gradle, Inc. 提供一项名为 Build Scan®
的免费服务,可提供有关您的构建的广泛信息和见解。 您可以查看扫描以识别问题或共享它们以获得调试帮助。
支持的语言和框架
Gradle 支持 Android、Java、Kotlin Multiplatform、Groovy、Scala、Javascript 和 C/C++。
兼容的集成开发环境
所有主要的 IDE 都支持 Gradle,包括 Android Studio、IntelliJ IDEA、Visual Studio Code、Eclipse 和 NetBeans。
您还可以通过终端中的命令行界面 (CLI) 或通过持续集成 (CI) 服务器调用 Gradle。
许可证
Gradle Build Tool 源代码
是开放
的,并根据 Apache License 2.0
获得许可。 Gradle 用户手册和 DSL 参考手册
根据 Creative Commons 署名-非商业性使用-相同方式共享 4.0 国际许可协议
获得许可。
兼容性
Java
需要 8 到 20 之间的 Java 版本才能执行 Gradle。 尚不支持 Java 21 及更高版本。
Java 6 和 Java 7 可用于编译,但不推荐用于测试。Gradle 6 和 7 不支持使用 Java 9.0 进行测试。
任何完全受支持的 Java 版本都可用于编译或测试。 但是,最新的 Java 版本可能仅支持编译或测试,而不支持运行 Gradle。 支持是使用工具链实现的,并适用于支持工具链的所有任务。
Java version | Support for compiling/testing/… | Support for running Gradle |
---|---|---|
8 | N/A | 2.0 |
9 | N/A | 4.3 |
10 | N/A | 4.7 |
11 | N/A | 5.0 |
12 | N/A | 5.4 |
13 | N/A | 6.0 |
14 | N/A | 6.3 |
15 | 6.7 | 6.7 |
16 | 7.0 | 7.0 |
17 | 7.3 | 7.3 |
18 | 7.5 | 7.5 |
19 | 7.6 | 7.6 |
20 | 8.1 | 8.3 |
21 | 8.4 | N/A |
Kotlin
Gradle version | Embedded Kotlin version | Kotlin Language version |
---|---|---|
5.0 | 1.3.10 | 1.3 |
5.1 | 1.3.11 | 1.3 |
5.2 | 1.3.20 | 1.3 |
5.3 | 1.3.21 | 1.3 |
5.5 | 1.3.31 | 1.3 |
5.6 | 1.3.41 | 1.3 |
6.0 | 1.3.50 | 1.3 |
6.1 | 1.3.61 | 1.3 |
6.3 | 1.3.70 | 1.3 |
6.4 | 1.3.71 | 1.3 |
6.5 | 1.3.72 | 1.3 |
6.8 | 1.4.20 | 1.3 |
7.0 | 1.4.31 | 1.4 |
7.2 | 1.5.21 | 1.4 |
7.3 | 1.5.31 | 1.4 |
7.5 | 1.6.21 | 1.4 |
7.6 | 1.7.10 | 1.4 |
8.0 | 1.8.10 | 1.8 |
8.2 | 1.8.20 | 1.8 |
8.3 | 1.9.0 | 1.8 |
8.4 | 1.9.10 | 1.8 |
Groovy
Gradle 在 Groovy 1.5.8 到 4.0.0 中进行了测试。
用 Groovy 编写的 Gradle 插件必须使用 Groovy 3.x,以便与 Gradle 和 Groovy DSL 构建脚本兼容。
Android
Gradle 已使用 Android Gradle 插件 7.3 至 8.1 进行了测试。 Alpha 和 Beta 版本可能有效,也可能无效。
Gradle 与 Maven 比较
下面总结了 Gradle 和 Apache Maven 之间的主要区别:灵活性
、性能
、用户体验
和依赖项管理
。这并不是详尽无遗的,但您可以查看 Gradle 功能列表和 Gradle 与 Maven 性能比较以了解更多信息。
此 GIF 显示了使用 Maven 和 Gradle(没有构建缓存)的 Apache Commons Lang 库的并排干净构建。您可以在此处查看内部版本
灵活性
谷歌选择 Gradle 作为 Android 的官方构建工具;不是因为构建脚本是代码,而是因为 Gradle 的建模方式在最基本的方式上是可扩展的。Gradle 的模型还允许它用于 C/C++ 的原生开发,并且可以扩展以涵盖任何生态系统。例如,Gradle 在设计时考虑到了使用其 Tooling API 的嵌入。
Gradle
和 Maven
都提供了约定而不是配置
。但是,Maven 提供了一个非常严格的模型,这使得定制变得乏味,有时甚至不可能。虽然这可以使理解任何给定的 Maven 构建变得更容易,但只要您没有任何特殊要求,它也使其不适合许多自动化问题。另一方面,Gradle 在构建时考虑到了授权和负责任的用户。
性能
缩短构建时间
是加快交付速度
的最直接方法之一。
Gradle 和 Maven 都采用了某种形式的并行项目构建和并行依赖项解析。最大的区别是 Gradle 的工作回避
和增量机制
。使 Gradle 比 Maven 快得多的前 3 个功能是:
增量
— Gradle 通过跟踪任务的输入和输出,仅运行必要的内容,并在可能的情况下仅处理已更改的文件来避免工作。构建缓存
- 使用相同的输入(包括计算机之间)重复使用任何其他 Gradle 构建的构建输出。Gradle Daemon
— 一个长期存在的进程,可将构建信息保持在内存中的“热”状态。
在这次 Gradle 与 Maven 性能比较中,这些以及更多的性能特性使 Gradle 在几乎所有场景中都至少快了一倍
(对于使用构建缓存
的大型构建,速度快了100
倍)。
注意:Gradle 和 Maven 用户都可以利用 Develocity
中提供的 Build Cache 技术
。 Gradle 用户通常会额外减少 ~50%
的构建时间,而 Maven 用户通常会减少 ~90%
。
用户体验
在 IDE 中使用 Kotlin 编写的 Gradle 构建脚本
Maven 的存在时间更长,这意味着它通过 IDE 的支持对许多用户来说更好·
。然而,Gradle 的 IDE 支持继续快速改进。例如,Gradle 现在有一个基于 Kotlin 的 DSL
,它提供了更好的 IDE
体验。Gradle 团队正在与 IDE 制造商合作,以提供更好的编辑支持——请继续关注更新。
尽管 IDE 很重要,但大量用户更喜欢通过命令行界面执行构建操作。Gradle 提供了一个现代 CLI,具有“gradle 任务”等可发现性功能,以及改进的日志记录和命令行完成功能。
最后,Gradle 提供了一个基于 Web 的交互式 UI,用于调试和优化构建:Build Scan™
。这些也可以托管在本地,以允许组织收集构建历史记录并进行趋势分析、比较构建以进行调试或优化构建时间。
依赖管理
这两个构建系统都提供了内置功
能,可以解析来自可配置存储库
的依赖关系。两者都能够在本地缓存依赖项
并行下载
它们。
作为库使用者,Maven 允许覆盖依赖项,但只能按版本覆盖。Gradle 提供可自定义的依赖项选择和替换规则,只需声明一次,即可在项目范围内处理不需要的依赖项。这种替换机制使 Gradle 能够一起构建多个源项目以创建复合构建
。
Maven 几乎没有内置的依赖关系范围,这在使用测试夹具或代码生成等常见场景中会强制使用笨拙的模块架构
。例如,单元测试和集成测试之间没有分离。Gradle 允许自定义依赖项范围
,从而提供更好的建模和更快的构建。
Maven 依赖项冲突
解决使用最短路径
,该路径受声明顺序
的影响。Gradle 会完全解决冲突
,选择图表中找到的依赖项的最高版本
。此外,使用 Gradle,您可以将版本声明为严格版本
,这允许它们优先于传递版本,从而允许降级依赖项
。
作为库生产者,Gradle 允许生产者声明“api”
和“implementation”
依赖项,以防止不需要的库泄漏到消费者的类路径中。Maven 允许发布者通过可选的依赖项提供元数据,但仅作为文档。Gradle 完全支持功能变体和可选依赖项。