<img height =" 1" width =" 1" style =" display:none" src =" https://www.facebook.com/tr?id=371406826709657&amp;ev=PageView&noscript=1">
欢迎参加12/12的 CloudBees 网络研讨会 ,以提高Maven和Gradle CI性能 close

Gradle Features

Gradle功能的分类列表将帮助您了解您的用例的某些功能. 请查阅用户手册以获取参考和Gradle入门指南 .

Table of Contents

Running Gradle Builds

这些功能会影响运行Gradle构建的开发人员,任何运行Gradle的人都可以利用这些功能.

Performance

Incremental Builds

自上次构建调用以来,Gradle会在两次构建运行之间检查任务的输入,输出或实现是否已更改. 如果不是,则认为该任务是最新的并且不执行. Gradle还将任务的配置视为其输入的一部分.

Task Output Caching

如果任务已经在另一台计算机上执行,则Gradle可以在本地跳过执行,而是从构建缓存中加载任务的输出. 典型的用例是让CI构建推送到共享构建缓存,并允许开发人员从中提取数据. 还可以使用本地构建缓存来重用同一台计算机上先前产生的任务输出. 包括Android,Kotlin,C ++和Scala在内的多个插件也支持任务级缓存.

Incremental Subtasks

当Gradle发现在两次构建运行之间任务的输入或输出已更改时,该任务将再次执行. 该任务可以使用增量API来了解确切地更改了哪些文件. 使用此信息,任务可能不需要重建所有内容.

Incremental Annotation Processing

当存在受支持的注释处理器时,增量注释处理将大大提高增量编译的有效性.

Compiler Daemon

当您需要派生编译过程时,Gradle会创建一个守护进程,该进程可在多项目构建中重用. 这极大地提高了编译过程的速度.

Parallel Execution

Gradle允许通过Worker API并行执行任务和任务内工作. 并行度非常细,可以提高性能.

Parallel Download of Dependencies

Gradle将并行下载依赖项元数据(通常是`pom.xml`)和工件. 仅当实际需要工件时才按需完成此操作.

Task timeouts

每个任务都有一个超时属性,可以用来限制其执行时间. 当任务达到超时时,其任务执行线程将中断并允许构建完成.

Build Scans

Web-based Build Visualization

通过功能丰富的Web界面(而不是文本控制台和文本文件)了解构建中发生的情况. 构建扫描可更有效地提供更多信息.

Collaborative Debugging

与同事共享构建扫描,以有效解决问题并共同改进. 共享专注于构建特定方面(例如日志输出行)的整个扫描或链接.

Extend and Customize

添加您自己的数据以标记,值和链接的形式进行扫描. 将构建扫描集成到您的工具链中.

Fine-grained Build Comparison [Gradle Enterprise]

构建扫描比较快速突出显示了构建之间的差异,例如依赖关系及其版本,从而使根本原因分析变得更快.

Track and Export History Across all Builds [Gradle Enterprise]

跟踪所有构建的关键构建指标,包括本地开发构建,而不仅仅是CI构建. 了解趋势并将构建扫描数据导出到您选择的存储中.

Execution Options

Continuous build

当Gradle任务以连续模式运行时,Gradle会自动监视此任务输入的更改. 只要输入更改,任务就会自动执行. 您可以在多项目构建中连续运行多个任务.

Composite builds

复合构建允许您包括其他独立项目,以便例如可以开发同时依赖的应用程序和库. 它们默认情况下是并行构建的,并且可以嵌套.

Task Exclusion

您可以排除任何正在运行的任务. 排除任务时,如果该任务没有其他依赖性,则也会自动排除该任务所依赖的所有任务.

Dry Run

运行构建以查看实际上执行了哪些任务而不执行任务操作.

Continue Execution After Failures

遇到第一个故障时不会立即停止. 执行要完成的所有任务的所有依赖关系而不会失败的每个任务. 在一次构建执行中就可以发现尽可能多的故障,并在末尾提供非常好的汇总错误报告.

Fail Fast Test execution

虽然在Gradle中默认是在测试失败后继续进行,但是您可以设置`--fail-fast`标志或配置`failFast = true`来使Gradle构建失败并在其中一项测试失败时完成.

Sync Dependency Cache with Repository

Gradle具有`--refresh-dependencies`选项,可忽略所有已缓存模块和工件的缓存条目. 将对所有已配置的存储库执行全新的解析,并重新计算动态版本,刷新模块并下载工件. 但是,在可能的情况下,Gradle将在再次下载之前检查先前下载的工件是否有效. 通过将存储库中已发布的SHA1值与现有下载的工件的SHA1值进行比较来完成此操作.

↑ Table of Contents

Authoring Gradle Builds

These features affect build authors and those responsible for developer productivity.

Build Logic is Testable Code

Groovy DSL

理想情况下,Groovy构建脚本看起来最像配置,包括设置项目的某些属性,配置依赖项,声明任务等. 该配置基于Groovy语言构造.

Kotlin DSL

Gradle的Kotlin DSL提供了传统Groovy DSL的替代语法,在受支持的IDE中具有增强的编辑体验,并具有出色的内容辅助,重构,文档等功能.

Gradle Init Plugin

Gradle Build Init插件可用于创建各种类型(Java应用程序,Java库,Groovy库,Kotlin应用程序等)的新Gradle构建,或将现有构建(例如Apache Maven构建)转换为Gradle构建.

Dependency Management

Transitive Dependencies

使用依赖项管理系统的主要好处之一是管理传递性依赖项. Gradle负责下载和管理可传递依赖项.

Custom Dependency Scopes

不受预定义的依赖范围集(编译,运行时等)的限制. Gradle允许您定义任意依赖项范围. 例如,对于您可以在构建中建模的集成测试,提供构建中所需的工具链等……

File Based Dependencies

并非所有依赖项都可以从外部存储库获得. 当使用托管依赖项不切实际或迁移旧版本时,声明对文件系统资源的依赖项.

Custom Repository Layout

使用自定义布局声明存储库. 使用自定义布局,您可以有效地将几乎所有文件系统目录结构视为工件存储库.

3rd Party Dependency Cache

Dependencies from remote repositories are downloaded and cached locally. Subsequent builds use cached artifacts to avoid unnecessary network traffic.

Maven and Ivy Repository Compatible

Gradle与POM&IVY元数据格式兼容,并且可以从任何Maven或IVY兼容存储库中检索依赖关系. 常春藤元数据暴露于自定义解析规则,使您可以过滤工件分支,状态或其他自定义元数据信息.

Native BOM support

本机支持平台定义,也称为Maven BOM依赖项,从而无需使用外部插件即可导入诸如Spring Boot平台定义之类的内容.

Dynamic Dependencies

解决的依赖关系版本可以是动态的. Gradle支持Maven快照机制,但功能更强大. 您可以声明对最新版本,最新开发版本甚至最新的5.X版本的依赖.

Dynamic Dependency Locking

使用动态依赖版本时,允许构建保持确定性和可复制性.

Dynamic Dependencies Selection Rules

定义动态规则时定义自定义规则以选择特定版本. 规则可以基于名称和版本,也可以基于分支或状态之类的扩展元数据. 这些规则还可以根据构建所发生的环境(例如本地或CI)而有所不同.

Dependency Version Alignment

依赖关系对齐允许将逻辑组中的不同模块(例如,杰克逊模块)对齐到同一版本.

Version Conflict Resolution

默认情况下,Gradle将冲突解决为最新请求的版本. 您可以自定义此行为.

Substitution of Compatible Libraries

使用依赖替换规则来确定应将依赖视为相似. 例如log4j和log4j-over-slf4j. 告诉Gradle仅应选择一个,然后使用Gradle冲突解决方案从这两个版本中选择最新版本. 类似的用例是在依存关系图中具有spring-all和spring-core之类的库的情况. 如果没有对此进行适当的建模,则应用程序的正确行为取决于类路径中非常脆弱的顺序.

Enhanced Metadata Resolution Support

依赖元数据可以在下载存储库元数据之后但在Gradle选择为最终解析版本之前进行修改. 这允许创建自定义规则来执行一些操作,例如将模块声明为更改(或快照)版本,或者使用自定义状态方案.

Replacement of external and project dependencies

动态地将外部依赖项替换为项目依赖项,反之亦然. 仅在本地检出模块的一部分时特别有用.

Standardizing Gradle Across Teams

Self-Provisioning Build Environment

使用Gradle包装器,可以自动配置Gradle构建环境. 此外,您可以确定应使用哪个版本来构建项目.

Version Controlled Build Environment Configuration

配置构建环境的重要参数可以作为项目的一部分存储在版本中. 开发人员无需手动设置它们. 这包括要使用的Gradle版本,运行构建的JVM的配置以及运行构建的JDK.

Custom Distributions

每个Gradle发行版都有一个init.d目录,您可以在其中放置预配置构建环境的自定义脚本. 您可以使用它来应用强制执行的自定义规则,为开发人员提供内置的设置任务,等等. 与Gradle包装器一起使用,您可以轻松分发这些自定义发行版.

Software Domain Modeling

Domain Object Containers

描述构建的每个域对象(无论是存储库,源目录,插件还是依赖项)都存储在一个可响应的容器中,您可以在该容器中注册侦听器. 您可以完全控制哪些特定的构建脚本添加到构建中. 扩充或修改已添加的内容,使构建失败或发出警告. 您可以添加仅在构建添加特定插件时才添加的定义依赖项. 一个非常非常强大的功能.

Publishing Multiple Artifacts

Gradle可以为每个项目使用不同的元数据发布多个工件. 它是用于不同Java平台的API和实现jar,库和测试夹具或变体.

Advanced Task Ordering

除了完全控制任务之间创建的依赖关系之外,Gradle还具有强大的语言构造来描述任务之间的执行顺序,即使任务不依赖于彼此的输出. 可以使用shouldRunAfter和mustRunAfter关系进行建模.

Task Dependency Inference

Gradle对象知道哪些任务产生某些内容. 例如,表示Java二进制目录的对象知道编译任务会生成二进制文件. 具有Java二进制目录作为输入的任何任务将自动取决于编译任务. 无需手动声明. 这使构建更易于维护且更可靠.

Task Finalizers

可以分配任务来完成另一个任务,类似于Java中的finalizer子句. 它们总是在执行另一个任务后运行,无论该任务是否失败. 例如,在对容器或数据库进行生命周期管理时,此功能非常强大.

Dynamic Task Creation

有时您想执行一个任务,该任务的行为取决于较大或无限数量的参数值范围. 提供此类任务的一种非常好的表达方式是任务规则.

Fine Grained Build Event Listener

Gradle允许您连接到构建配置和执行生命周期的每个部分,以注入自定义行为,提取信息,添加其他日志记录以及大量其他用例.

User Based Behavior Injection

您可以将自定义侦听器放入您的Gradle用户主目录中,以挂接到计算机上执行的每个Gradle构建中. 使用上述生命周期侦听器,您可以添加任何想要定制化构建体验的自定义行为. 例如,添加和配置Gradle公告插件,当构建完成或失败时,该插件会弹出一个窗口,或者添加您个人使用的特殊存储库.

Per Build Behavior Injection

类似于基于用户的行为注入,您还可以在命令行上指定附加到构建中的其他侦听器. 例如,如果您希望CI构建具有特定的行为(例如,如果使用非标准存储库则失败),这将非常有用.

Gradle Plugin Authoring

TestKit for Functional Testing

通过与测试框架无关的API以编程方式执行构建. 检查构建结果和输出. 跨版本兼容性测试. 从IDE调试测试中的构建.

Custom Command Line Options

任务API支持一种用于标记属性的机制,以在运行时自动生成具有特定名称的相应命令行参数.

↑ Table of Contents

Ecosystem-specific Features

特定于JVM,Android,C ++,Swift,Objective C和其他生态系统的功能.

JVM Applications

Incremental Compilation for Java

无论源代码还是类路径发生更改,Gradle都会检测到受更改影响的所有类,并将仅重新编译这些类.

Compile Avoidance for Java

如果从属项目以与ABI兼容的方式进行了更改(仅更改了其专用API),则Java编译任务将是最新的.

Built-in Groovy Support

Groovy插件扩展了Java插件,以添加对Groovy项目的支持. 它可以处理Groovy代码,Groovy与Java混合代码,甚至是纯Java代码.

Built-in Scala Support

Scala插件扩展了Java插件,以添加对Scala项目的支持. 它可以处理Scala代码,Scala和Java混合代码,甚至是纯Java代码.

Built-in Support for JVM Code Quality Tools

Gradle发行版包括CheckstyleCodeNarcFindBugsPMDJaCoCo和其他工具的插件.

Packaging and Distribution for JARs, WARs, and EARs

Gradle开箱即用,提供了将基于JVM的代码打包到公共归档文件中的工具.

Publishing to Maven Repositories

将工件发布到Bintray或Maven Central等Maven存储库.

Publishing to Ivy Repositories

使用可自定义的目录布局将工件发布到Ivy存储库.

Ant Integration

您可以深入集成任何默认,可选或定制的Ant任务. 您还可以在运行时导入Ant构建,甚至可以部分替换依赖于Gradle任务的Ant目标.

Android Applications

Official Android Build Tool

The Gradle Android Plugin and Android Studio are official tools provided and maintained by the Android SDK Tools team. To learn more about using Gradle with Android, please reference the Android Developer Documentation for Gradle.

Native Applications

Build C/C++/Obj-C/Obj-C++/Assembler

Gradle内置了对使用Assembler,C / C ++和Obj-C / C ++进行编译和链接程序的支持. Gradle可以构建共享和静态库以及可执行文件.

Model variants of a native component

轻松建模本机组件的变体,例如对不同ABI,OS,构建类型等的支持.

GCC Support

Gradle支持在Linux,Windows(使用Cygwin和MingW)和Mac OS X上使用GCC4进行构建.

Clang Support

Gradle支持在Linux和Mac OS X上使用Clang进行构建.

MS Visual C++ Support

Gradle支持在Windows上使用Microsoft的Visual C ++编译器进行构建. (支持VS 2010,VS 2013和VS 2015)

Generates Windows Resources

Gradle使用Microsoft的资源编译器将Windows资源脚本文件构建到您的应用程序中.

Parallel Compilation

在构建本机代码时,Gradle将编译步骤划分为可并行化的任务,并在共享资源池中执行它们. 这样可以加快单个项目的速度,并确保Gradle在并行的多项目构建中不会消耗太多资源.

Precompiled Headers

Gradle使您在构建软件时易于使用预编译的头文件. 如果项目的大多数源代码中都包含许多头文件,则预编译的头文件可以加快编译时间. 预编译头是特定于编译器的优化,用于缓存已解析的头版本.

Build mixed language binaries

Gradle可以构建单独的语言(例如,汇编语言和C语言)并将其链接到单个可执行文件或库中.

CUnit Test Support

Gradle支持使用CUnit测试C应用程序.

GoogleTest Support

Gradle支持使用GoogleTest测试C ++应用程序.

Cached Compilation

在构建本机代码时,Gradle使用构建缓存来避免重新编译未更改的代码. 重复使用缓存的编译时,将考虑编译器参数,宏定义和标头.

↑ Table of Contents

Features for Developer Tool Providers

对于从事IDE和持续集成系统工作的人员来说,这些功能将是最有趣的,但是还有许多其他创造性用途.

Embed Gradle with Tooling API

SDK for embedded usage

由Gradle Tooling API提供

Version agnostic

Gradle工具API前后兼容. 使用特定版本的Tooling API,您可以驱动自1.0以来的所有Gradle版本.

Querying for Project model

您可以查询Gradle以获取构建的详细信息,包括项目层次结构和项目依赖项,外部依赖项(包括源和Javadoc jar),每个项目的源目录和任务.

Query for Build environment information

Gradle可通过编程方式访问有关构建环境的信息. 这包括有关Gradle版本,Gradle用户主目录和Java主目录的信息.

Execute a build

您可以执行构建并侦听stdout和stderr的日志记录和进度(例如,在命令行上运行时,"状态栏"中显示的内容).

Build Operation Cancellation

通过Gradle Tooling API发起的所有操作均可在构建过程中随时取消

Support custom JVM settings

通过Gradle Tooling API提供的JVM arg优先于gradle.properties

Provide Eclipse Project Model

Gradle Tooling API提供了一个如何将您的项目映射到Eclipse项目的模型.

Provide IDEA Project Model

Gradle Tooling API提供了一个模型,该模型将您的项目如何映射到IDEA模型.

Provide support for custom Project Model

您可以编写Gradle插件来为Gradle Tooling API添加自定义元数据. 例如,当您将自己的产品/定制与Gradle集成时,可以使用此功能.

Run specific tests

TestLauncher API允许在一个或多个测试任务中运行特定的JUnit或TestNG测试

Register for progress events

注册任务或测试进度事件,以获取有关构建过程的信息,其中包含有关已处理任务和测试的丰富信息

Run Continuous Builds

Gradle Tooling API提供了以"连续构建"模式以编程方式运行构建的功能. 构建输入上的更改(文件更改)连续触发指定任务运行.

Customizable Logging

Custom Logging Schemas

您可以使用自己的Gradle替换许多Logging UI. 例如,如果您想以某种方式自定义UI(例如,记录更多或更少的信息或更改格式),则可以执行此操作.

Redirecting Output from Other Tools

构建输出对于构建用户体验非常重要. 如果与外部工具和库集成,则其控制台输出可能会非常冗长. 在Gradle System.out和Java Util Logging的日志输出中,将Jakarta Commons Logging和Log4j重新输出到Gradle日志记录系统中. 您可以定义每个要集成的外部工具,以及将输出路由到哪个日志级别.

↑ Table of Contents

by  ICOPY.SITE