Gradle 构建工具功能
这份分类的 Gradle 构建工具功能列表将帮助您了解 Gradle 构建工具在您的使用场景中的一些能力。请查看用户指南以供参考,以及Gradle 构建工具教程来开始使用。
目录
运行 Gradle 构建
这些功能会影响运行 Gradle 构建的开发人员,并且任何运行 Gradle 的人都可以利用它们。
性能
增量构建
Gradle 会在两次构建之间检查任务的输入、输出或实现自上次构建调用以来是否发生了变化。如果没有,该任务将被视为最新的,无需执行。Gradle 还将任务的配置视为其输入的一部分。
构建缓存
如果一个任务已经在另一台计算机上执行过,Gradle 可以在本地跳过执行,而是从构建缓存中加载任务的输出。典型的用例是让 CI 构建推送到共享的构建缓存,并允许开发人员从中拉取。本地构建缓存也可用,以重用同一台机器上早先生成的任务输出。
增量任务
当 Gradle 发现在两次构建运行之间任务的输入或输出发生了变化时,该任务会再次执行。任务可以使用增量 API 来了解哪些文件具体发生了变化。有了这些信息,任务可能不需要重新构建所有内容。
增量注解处理
当存在受支持的注解处理器时,增量注解处理会显著提高增量编译的效率。
编译器守护进程
当您需要 fork 编译过程时,Gradle 会创建一个在多项目构建中重用的守护进程。这为编译过程带来了显著的速度提升。
并行执行
Gradle 允许通过 Worker API 并行执行任务和任务内的工作。并行性非常细粒度,从而实现更快的性能。
并行下载依赖
Gradle 将并行下载依赖元数据(通常是 `pom.xml`)和构件。这仅在需要构件时按需进行。
任务超时
每个任务都有一个超时属性,可用于限制其执行时间。当任务达到其超时时间时,其任务执行线程将被中断,从而允许构建完成。
构建扫描
基于 Web 的构建可视化
通过丰富的 Web 界面而不是文本控制台和文本文件来了解您的构建中发生了什么。构建扫描提供更多信息并且更有效。
协作调试
与同事共享构建扫描,以高效地解决问题并共同改进。共享整个扫描或专注于特定构建方面的链接,例如日志输出行。
扩展和定制
以标签、值和链接的形式向构建扫描中添加您自己的数据。将构建扫描集成到您的工具链中。
细粒度构建比较 [Develocity]
构建扫描比较可以快速突出显示构建之间的差异,例如依赖及其版本,从而使根本原因分析速度更快。
跟踪和导出所有构建的历史记录 [Develocity]
跟踪所有构建的关键构建指标,包括本地开发构建而不仅仅是 CI 构建。了解趋势并将构建扫描数据导出到您选择的存储中。
执行选项
连续构建
当 Gradle 任务以连续模式运行时,Gradle 会自动监视此任务输入的变化。每当输入发生变化时,任务就会自动执行。您可以在多项目构建中连续运行多个任务。
组合构建
组合构建允许您包含其他独立的项目,这样您就可以同时开发一个应用程序和它所依赖的库。它们默认并行构建,并且可以嵌套。
任务排除
您可以排除任何任务的运行。当您排除一个任务时,如果该任务所依赖的所有任务没有其他依赖项,它们也会被自动排除。
空运行
运行一个构建以查看哪些任务实际会被执行,而不执行任务操作。
失败后继续执行
构建在遇到第一个失败时不会停止。这使得在单次构建执行中能够发现尽可能多的失败,并在最后提供一个非常好的聚合错误报告。
快速失败测试执行
虽然在测试失败后继续是 Gradle 的默认行为,但您可以为 Gradle 构建设置 `--fail-fast` 标志或配置 `failFast=true`,以便在您的任何一个测试失败时立即失败并完成构建。
与仓库同步依赖缓存
Gradle 有一个 `--refresh-dependencies` 选项,可以忽略所有已解析模块和构件的缓存条目。将对所有已配置的仓库执行一次全新的解析,重新计算动态版本,刷新模块并下载构件。但是,Gradle 在再次下载之前会检查先前下载的构件是否有效。这是通过比较仓库中发布的 SHA1 值与现有已下载构件的 SHA1 值来完成的。
特定生态系统的功能
特定于 JVM、Android、C++、Swift、Objective C 和其他生态系统的功能。
JVM 应用程序
Java 的增量编译
无论是源代码还是类路径发生变化,Gradle 都会检测所有受变化影响的类,并且只会重新编译这些类。
Java 的编译避免
如果一个依赖项目以 ABI 兼容的方式发生了变化(只有其私有 API 发生了变化),Java 编译任务将保持最新状态。
内置 Groovy 支持
Groovy 插件扩展了 Java 插件,以增加对 Groovy 项目的支持。它可以处理 Groovy 代码、混合 Groovy 和 Java 代码,甚至纯 Java 代码。
内置 Scala 支持
Scala 插件扩展了 Java 插件,以增加对 Scala 项目的支持。它可以处理 Scala 代码、混合 Scala 和 Java 代码,甚至纯 Java 代码。
内置支持 JVM 代码质量工具
Gradle 发行版包括 Checkstyle、CodeNarc、PMD、JaCoCo 和其他工具的插件。
JAR、WAR 和 EAR 的打包和分发
Gradle 自带工具,可将基于 JVM 的代码打包成常见的归档文件。
发布到 Maven 仓库
将构件发布到 Maven 仓库,如 Bintray 或 Maven Central。
发布到 Ivy 仓库
将构件发布到具有可自定义目录布局的 Ivy 仓库。
Ant 集成
您可以深度集成任何默认、可选或自定义的 Ant 任务。您还可以在运行时导入 Ant 构建,甚至部分替换依赖于 Gradle 任务的 Ant 目标。
Android 应用程序
官方 Android 构建工具
Gradle Android 插件和 Android Studio 是由 Android SDK 工具团队提供和维护的官方工具。要了解更多关于将 Gradle 与 Android 结合使用的信息,请参考Android 开发者 Gradle 文档。
原生应用程序
构建 C/C++/Obj-C/Obj-C++/汇编
Gradle 内置支持使用汇编、C/C++ 和 Obj-C/C++ 编译和链接程序。Gradle 可以构建共享库、静态库和可执行文件。
为原生组件建模变体
轻松为原生组件的变体建模,例如支持不同的 ABI、操作系统、构建类型等。
GCC 支持
Gradle 支持在 Linux、Windows(使用 Cygwin 和 MingW)和 Mac OS X 上使用 GCC4 进行构建。
Clang 支持
Gradle 支持在 Linux 和 Mac OS X 上使用 Clang 进行构建。
MS Visual C++ 支持
Gradle 支持在 Windows 上使用 Microsoft 的 Visual C++ 编译器进行构建。(支持 VS 2010、VS 2013 和 VS 2015)
生成 Windows 资源
Gradle 使用 Microsoft 的资源编译器将 Windows 资源脚本文件构建到您的应用程序中。
并行编译
在构建原生代码时,Gradle 将编译步骤划分为可并行的任务,并在共享资源池中执行它们。这加快了单个项目的情况,并确保 Gradle 在并行多项目构建中不会消耗过多资源。
预编译头文件
Gradle 使在构建软件时使用预编译头文件变得容易。如果您的项目有许多头文件包含在大多数源代码中,预编译头文件可以加快编译时间。预编译头文件是一种特定于编译器的优化,用于缓存已解析的头文件版本。
构建混合语言二进制文件
Gradle 可以构建独立的语言(例如,汇编和 C),并将它们链接成一个可执行文件或库。
CUnit 测试支持
Gradle 支持使用 CUnit 测试 C 应用程序。
GoogleTest 支持
Gradle 支持使用 GoogleTest 测试 C++ 应用程序。
缓存编译
在构建原生代码时,Gradle 使用构建缓存来避免重新编译未更改的代码。在重用缓存的编译时,会考虑编译器参数、宏定义和头文件。
为开发者工具提供商提供的功能
这些功能对于从事 IDE 和持续集成系统工作的人员最感兴趣,但还有许多其他创造性的用途。
使用 Tooling API 嵌入 Gradle
用于嵌入式使用的 SDK
由 Gradle Tooling API 提供
版本无关
Gradle Tooling API 是向后和向前兼容的。使用特定版本的 Tooling API,您可以驱动自 1.0 以来的所有 Gradle 版本的构建。
查询项目模型
您可以向 Gradle 查询构建的详细信息,包括项目层次结构、项目依赖、外部依赖(包括源代码和 Javadoc jar)、源目录以及每个项目中的任务。
查询构建环境信息
Gradle 提供对构建环境信息的编程访问。这包括有关 Gradle 版本、Gradle 用户主目录和 Java 主目录的信息。
执行构建
您可以执行一个构建并监听 stdout 和 stderr 日志记录和进度(例如,在命令行上运行时“状态栏”中显示的内容)。
构建操作取消
通过 Gradle Tooling API 发起的所有操作都可以在构建过程中的任何时候被优雅地取消
支持自定义 JVM 设置
通过 Gradle Tooling API 提供的 JVM 参数优先于 gradle.properties
提供 Eclipse 项目模型
Gradle Tooling API 提供了一个模型,说明您的项目如何映射到 Eclipse 项目。
提供 IDEA 项目模型
Gradle Tooling API 提供了一个模型,说明您的项目如何映射到 IDEA 模型。
为自定义项目模型提供支持
您可以编写一个 Gradle 插件,为 Gradle Tooling API 添加自定义元数据。例如,当您将自己的产品/定制与 Gradle 集成时,可以使用此功能。
运行特定测试
TestLauncher API 允许在一个或多个测试任务中运行特定的 JUnit 或 TestNG 测试
注册进度事件
注册任务或测试进度的事件,以获取有关构建过程的丰富信息,包括已处理的任务和测试的详细信息
运行连续构建
Gradle Tooling API 提供了以“连续构建”模式编程运行构建的功能。构建输入的变化(文件变化)会持续触发指定的任务运行。
可定制的日志记录
自定义日志记录方案
您可以用自己的 UI 替换 Gradle 的大部分日志记录 UI。例如,如果您想以某种方式自定义 UI,比如记录更多或更少的信息,或者更改格式,就可以这样做。
重定向其他工具的输出
构建输出对于构建用户体验非常重要。与外部工具和库集成可能会使控制台输出非常冗长。在 Gradle 中,System.out、Java Util Logging、Jakarta Commons Logging 和 Log4j 的日志输出被重新路由到 Gradle 日志记录系统。您可以按工具定义路由和日志级别。