您应该理解一些基本概念,它们将有助于您编写 Gradle 脚本。
首先,Gradle 脚本是配置脚本。脚本执行时,它会配置特定类型的对象。例如,构建脚本执行时,它会配置 Project
类型的对象。此对象称为脚本的委托对象。下表显示了每种 Gradle 脚本类型的委托。
委托对象的属性和方法可在脚本中使用。
其次,每个 Gradle 脚本都实现了 Script
接口。此接口定义了许多可在脚本中使用的属性和方法。
构建脚本由零个或多个语句和脚本块组成。语句可以包括方法调用、属性赋值和局部变量定义。脚本块是采用闭包作为参数的方法调用。该闭包被视为配置闭包,它在执行时配置一些委托对象。下面列出了顶级脚本块。
块 | 描述 |
allprojects { } | 配置此项目及其每个子项目。 |
artifacts { } | 配置此项目的发布制品。 |
buildscript { } | 配置此项目的构建脚本类路径。 |
configurations { } | 配置此项目的依赖项配置。 |
dependencies { } | 配置此项目的依赖项。 |
repositories { } | 配置此项目的存储库。 |
subprojects { } | 配置此项目的子项目。 |
publishing { } | 配置由发布插件添加的 |
构建脚本也是 Groovy 脚本,因此可以包含 Groovy 脚本中允许的元素,例如方法定义和类定义。
下面列出了一些在 Gradle 脚本中使用的核心类型
类型 | 描述 |
Project | 此接口是您从构建文件与 Gradle 交互的主要 API。通过 |
Task |
|
Gradle | 表示 Gradle 的一次调用。 |
Settings | 声明实例化和配置将参与构建的 |
IncludedBuild | 复合构建中包含的构建。 |
ProjectLayout | 提供对项目几个重要位置的访问。 |
BuildLayout | 提供对 Gradle 构建重要位置的访问。 |
Script | 所有 Gradle Groovy DSL 脚本都实现了此接口,以添加一些 Gradle 特定方法。由于编译后的脚本类将实现此接口,因此您可以直接在脚本中使用此接口声明的方法和属性。 |
SourceSet |
|
SourceSetOutput | 所有输出目录(编译后的类、处理后的资源等)的集合——请注意, |
SourceDirectorySet |
|
配置 |
|
ConsumableConfiguration | 可通过发布和依赖项管理使用的 |
ResolvableConfiguration | 执行依赖项解析以构建依赖项图并解析制品的 |
DependencyScopeConfiguration | 收集依赖项、依赖项约束和排除规则的 |
ResolutionStrategy | 定义依赖项解析策略。例如,强制使用特定依赖项版本、替换、冲突解析或快照超时。 |
ArtifactResolutionQuery | 用于构建查询的构建器,该查询可以解析指定组件的选定软件制品。 |
ComponentSelection | 表示模块的组件选择器和要在组件选择规则中评估的候选版本的元组。 |
ComponentSelectionRules | 表示组件选择规则的容器。规则可以作为配置的 `resolutionStrategy` 的一部分应用,并且可以通过规则明确接受或拒绝单个组件。既未被接受也未被拒绝的组件将受默认版本匹配策略的约束。 |
DependencyCollector | 在 DSL 中, |
ExtensionAware | 可以在运行时用其他对象扩展的对象。 |
ExtraPropertiesExtension | Gradle 领域对象的额外、临时属性。 |
PluginDependenciesSpec | 用于在脚本中声明要使用的插件的 DSL。 |
PluginDependencySpec | 对插件依赖的可变规范。 |
PluginManagementSpec | 配置插件如何解析。 |
ProviderFactory | 用于创建 |
ResourceHandler | 提供对资源特定实用方法的访问,例如创建各种资源的工厂方法。 |
TextResourceFactory | 创建由字符串、文件和存档条目等源支持的 |
InputChanges | 提供对需要由增量工作操作处理的任何输入文件的访问。 |
Distribution | 分发允许捆绑应用程序或库,包括依赖项、源... |
下面列出了用于配置发布的类型
类型 | 描述 |
PublishingExtension | 如何“发布”项目不同组件的配置。 |
IvyPublication |
|
IvyArtifact | 作为 |
IvyArtifactSet | 要包含在 |
IvyModuleDescriptorSpec | 任何 Ivy 出版的描述符。 |
IvyModuleDescriptorAuthor | Ivy 出版的作者。 |
IvyModuleDescriptorLicense | Ivy 出版的许可证。 |
IvyModuleDescriptorDescription | Ivy 出版的描述。 |
MavenPublication |
|
MavenArtifact | 作为 |
MavenArtifactSet | 要包含在 |
MavenPom | Maven 出版的 POM。 |
MavenPomCiManagement | Maven 出版的 CI 管理系统。 |
MavenPomContributor | Maven 出版的贡献者。 |
MavenPomContributorSpec | 允许添加 Maven 出版的贡献者。 |
MavenPomDeveloper | Maven 出版的开发者。 |
MavenPomDeveloperSpec | 允许向 Maven 出版添加开发者。 |
MavenPomDistributionManagement | Maven 出版的分发管理配置。 |
MavenPomIssueManagement | Maven 出版的 Issue 管理系统。 |
MavenPomLicense | Maven 出版的许可证。 |
MavenPomLicenseSpec | 允许向 Maven 出版添加许可证。 |
MavenPomMailingList | Maven 出版的邮件列表。 |
MavenPomMailingListSpec | 允许向 Maven 出版添加邮件列表。 |
MavenPomOrganization | Maven 出版的组织。 |
MavenPomRelocation | 已移至新组和/或制品 ID 的 Maven 出版的重定位信息。 |
MavenPomScm | Maven 出版的 SCM(源代码控制管理)。 |
处理各种声明性元素(例如依赖项、配置、制品、任务等)的容器类型
类型 | 描述 |
TaskContainer |
|
ConfigurationContainer |
|
RepositoryHandler |
|
DependencyHandler |
|
ComponentMetadataHandler | 允许构建提供规则来修改所依赖的软件组件的元数据。组件元数据规则在构建脚本的依赖项块 |
ArtifactHandler | 此类用于定义要发布的制品并将其添加到配置中。创建发布制品并不意味着创建存档。创建的是一个域对象,它表示要发布的文件以及如何发布的信息(例如名称)。 |
用于连接到存储库的凭据和认证类型
类型 | 描述 |
AuthenticationSupported | 支持用户名/密码认证的制品存储库。 |
Credentials | 用于不同认证目的的凭据的基本接口。(例如,认证的 |
PasswordCredentials | 可用于登录受密码保护的远程存储库的用户名/密码凭据。 |
AwsCredentials | 表示用于向 Amazon Web Services 进行认证的凭据。 |
HttpHeaderCredentials | 可用于通过使用 HTTP 头部登录受保护服务器(例如远程存储库)的凭据。用于从属性创建凭据的属性是 |
AuthenticationContainer | 用于配置类型为 |
Authentication | 传输认证方案的基本接口。 |
BasicAuthentication | 通过 HTTP 进行基本访问认证的认证方案。使用此方案时,凭据会预先发送。 |
HttpHeaderAuthentication | 通过 HTTP 进行 HTTP 头部认证的认证方案。 |
摘要认证 | 通过 HTTP 进行摘要式访问认证的认证方案。 |
用于连接和配置构建缓存的类型
类型 | 描述 |
BuildCacheConfiguration | 整个 Gradle 构建的 构建缓存 配置。 |
DirectoryBuildCache | 本地目录构建缓存的配置对象。 |
HttpBuildCache | HTTP 构建缓存的配置对象。缓存条目通过 GET 加载,通过 PUT 请求存储。 |
用于配置输入标准化的类型
类型 | 描述 |
InputNormalizationHandler | 用于配置输入标准化。目前,只能配置运行时类路径标准化。 |
InputNormalization | 输入标准化配置。当 Gradle 尝试确定两个任务输入是否不同时,使用输入标准化。Gradle 对两个输入进行标准化,并且当且仅当标准化不同时,输入才被视为不同。 |
RuntimeClasspathNormalization | 运行时类路径标准化的配置。 |
以下是每个 Gradle 项目可用的任务类型。这些任务类型也可以直接在构建脚本中声明和配置。
类型 | 描述 |
TaskReportTask | 显示项目中的任务列表。当您从命令行执行 |
ProjectReportTask | 显示构建中的项目列表。当您从命令行执行 |
DependencyReportTask | 显示项目的依赖关系树。当您从命令行执行 |
DependencyInsightReportTask | 生成一个报告,尝试回答以下问题 |
PropertyReportTask | 显示项目的属性。当您从命令行执行 |
ComponentReport | 显示有关项目产生的软件组件的一些详细信息。 |
DependentComponentsReport | 显示依赖组件。 |
ModelReport | 显示有关项目配置模型的一些详细信息。当您从命令行执行 |
OutgoingVariantsReportTask | 一个任务,用于在命令行上报告项目的输出变体。这对于列出项目在变体方面产生的内容以及每个变体附加的制品非常有用。在这种情况下,变体必须理解为“项目产生的可以安全地被另一个项目消费的东西”。 |
ResolvableConfigurationsReportTask | 一个任务,用于在命令行上报告项目可解析的配置。这对于确定与用于解析项目依赖项的可解析配置关联的属性非常有用。输出可以帮助预测每个依赖项的哪个变体将被解析。 |
ArtifactTransformsReportTask | 一个任务,用于报告有关项目使用的制品转换(由 |
以下是构建脚本中可用的各种任务类型
类型 | 描述 |
AntlrTask | 从 Antlr 语法生成解析器。 |
BuildEnvironmentReportTask | 提供与任务关联的项目的构建环境信息。 |
Checkstyle | 对某些源文件运行 Checkstyle。 |
CodeNarc | 对某些源文件运行 CodeNarc。 |
Copy | 将文件复制到目标目录。此任务在复制时还可以重命名和过滤文件。该任务实现了 |
CreateStartScripts | 为启动 JVM 应用程序创建启动脚本。 |
Delete | 删除文件或目录。示例 |
Ear | 组装 EAR 存档。 |
Exec | 执行命令行进程。示例 |
GenerateIvyDescriptor | 生成 Ivy XML 模块描述符文件。 |
GenerateMavenPom | 生成 Maven 模块描述符 (POM) 文件。 |
GenerateBuildDashboard | 生成构建仪表板报告。 |
GradleBuild | 执行 Gradle 构建。 |
GroovyCompile | 编译 Groovy 源文件,并可选地编译 Java 源文件。 |
Groovydoc | 为 Groovy 源代码,并可选地为 Java 源代码生成 HTML API 文档。 |
HtmlDependencyReportTask | 生成 HTML 依赖项报告。此报告结合了 ASCII 依赖项报告和 ASCII 依赖项洞察报告的功能。对于给定项目,它会生成每个配置的依赖项树,并且可以单击每个依赖项以显示此依赖项的洞察信息。 |
JacocoReport | 生成 Jacoco 覆盖率数据的 HTML、XML 和 CSV 报告的任务。 |
JacocoCoverageVerification | 用于验证代码覆盖率指标的任务。如果根据指定规则检测到违规,则任务失败。 |
Jar | 组装 JAR 存档。 |
JavaCompile | 编译 Java 源文件。 |
Javadoc | 为 Java 类生成 HTML API 文档。 |
JavaExec | 在子进程中执行 Java 应用程序。 |
Pmd | 对 Java 源代码文件运行一组静态代码分析规则,并生成发现问题的报告。 |
ProcessResources | 将资源从其源目录复制到目标目录,并可能对其进行处理。确保目标目录中没有残留的陈旧资源。 |
PublishToIvyRepository | 将 IvyPublication 发布到 IvyArtifactRepository。 |
PublishToMavenRepository | |
ScalaCompile | 编译 Scala 源文件,并可选地编译 Java 源文件。 |
ScalaDoc | 为 Scala 源文件生成 HTML API 文档。 |
UpdateDaemonJvm | 生成或更新 Gradle Daemon JVM 准则。这控制了运行 Gradle Daemon 所需的 JVM 版本。 |
InitBuild | 生成 Gradle 项目结构。 |
Sign | 用于为一个或多个任务、文件、可发布制品或配置创建数字签名文件的任务。 |
Sync | 将目标目录的内容与某些源目录和文件同步。 |
Tar | 组装 TAR 存档。 |
AbstractTestTask | 所有测试任务的抽象类。 |
Test | 执行 JUnit (3.8.x, 4.x 或 5.x) 或 TestNG 测试。测试始终在(一个或多个)单独的 JVM 中运行。 |
TestReport | 根据一个或多个 |
War | 组装 WAR 存档。 |
Wrapper | 生成脚本(适用于 *nix 和 Windows),让您可以使用 Gradle 构建项目,而无需安装 Gradle。 |
WriteProperties | 以可重现的方式写入 |
Zip | 组装 ZIP 存档。默认是压缩 ZIP 内容。 |
下面列出了与模型化测试套件相关的任务和可配置对象
类型 | 描述 |
TestingExtension | 此 DSL 元素用于包含 |
TestSuite | 基础测试套件组件。测试套件是测试的集合。 |
JvmTestSuite | 测试套件是基于 JVM 的测试集合。 |
TestSuiteTarget | 基础测试套件目标。测试套件目标是在特定上下文(操作系统、Java 运行时等)中运行的测试集合。 |
JvmTestSuiteTarget | 定义 |
Test | 执行 JUnit (3.8.x, 4.x 或 5.x) 或 TestNG 测试。测试始终在(一个或多个)单独的 JVM 中运行。 |
依赖项 | 适用于所有 |
GradleDependencies | 适用于可构建依赖于 Gradle API 的软件的 |
TestFixturesDependencyModifiers | 可在其他模块中查找测试夹具的 |
PlatformDependencyModifiers | 可在其他模块中查找平台和强制平台的 |
JvmComponentDependencies | 此 DSL 元素用于向组件添加依赖项,例如 |
下面列出了生成报告时使用的一些类型
类型 | 描述 |
CustomizableHtmlReport | 一个可以通过 XSLT 样式表自定义生成的 HTML 报告。 |
SingleFileReport | 一个单一文件报告。 |
DirectoryReport | 一个基于目录的报告,待创建。 |
Report | 一个基于文件的报告,待创建。 |
Reporting | 一个提供报告选项的对象。 |
ReportContainer | 一个 |
ReportingExtension | 一个名为“reporting”的项目扩展,提供基本的报告设置和实用程序。 |
AggregateTestReport | 聚合测试报告输入的容器。 |
JacocoCoverageReport | 聚合 JaCoCo 代码覆盖率报告输入的容器。 |
用于配置 Eclipse 或 IDEA 插件
类型 | 描述 |
EclipseModel | Eclipse 项目信息的 DSL 友好模型。定制 Eclipse 项目生成的第一入口点。 |
EclipseProject | 允许微调 Eclipse 插件的项目详细信息(.project 文件) |
EclipseClasspath | 生成的 Eclipse 项目的构建路径设置。由 |
EclipseJdt | 允许微调 Eclipse 插件的 JDT 详细信息 |
EclipseWtp | 允许微调 Eclipse 插件的 WTP/WST 详细信息 |
EclipseWtpComponent | 允许微调 Eclipse 插件的 WTP 组件详细信息 |
EclipseWtpFacet | 允许微调 Eclipse 插件的 WTP Facet 详细信息 |
IdeaModel | IDEA 项目信息的 DSL 友好模型。定制 IDEA 生成的第一入口点。 |
IdeaProject | 允许微调 IDEA 插件的项目详细信息(*.ipr 文件)。 |
IdeaModule | 允许微调 IDEA 插件的模块详细信息(*.iml 文件)。 |
IdeaWorkspace | 允许微调 IDEA 插件的工作区详细信息(*.iws 文件)。 |
XmlFileContentMerger | 模拟生成/解析/合并功能。添加 XML 相关钩子。 |
FileContentMerger | 模拟生成/解析/合并功能。 |
IDE 插件贡献的任务。要配置 IDE 插件,请使用 IDE 模型类型。
类型 | 描述 |
GenerateEclipseProject | 生成 Eclipse |
GenerateEclipseClasspath | 生成 Eclipse |
GenerateEclipseJdt | 生成 Eclipse JDT 配置文件。如果您想微调 Eclipse 配置 |
GenerateEclipseWtpComponent | 为 Eclipse WTP 生成 org.eclipse.wst.common.component 设置文件。如果您想微调 Eclipse 配置 |
GenerateEclipseWtpFacet | 为 Eclipse WTP 生成 org.eclipse.wst.common.project.facet.core 设置文件。如果您想微调 Eclipse 配置 |
GenerateIdeaModule | 生成 IDEA 模块文件。如果您想微调 IDEA 配置 |
GenerateIdeaProject | 仅为根项目生成 IDEA 项目文件。如果您想微调 IDEA 配置 |
GenerateIdeaWorkspace | 仅为根项目生成 IDEA 工作区文件。目前,关于工作区生成可配置的内容很少。 |
Xcode IDE 插件贡献的任务。要配置 IDE 插件,请使用 IDE 模型类型。
类型 | 描述 |
GenerateSchemeFileTask | 用于生成 Xcode 方案文件(例如 |
GenerateWorkspaceSettingsFileTask | 用于生成 Xcode 工作区设置文件(例如 |
GenerateXcodeProjectFileTask | 用于生成 Xcode 项目文件(例如 |
GenerateXcodeWorkspaceFileTask | 用于生成 Xcode 工作区文件(例如 |
Visual Studio IDE 插件贡献的任务。要配置 IDE 插件,请使用 IDE 模型类型。
类型 | 描述 |
GenerateSolutionFileTask | 用于生成 Visual Studio 解决方案文件(例如 |
GenerateProjectFileTask | 用于生成 Visual Studio 项目文件(例如 |
GenerateFiltersFileTask | 用于生成 Visual Studio 过滤器文件(例如 |
用于配置构建 C++ 和 Swift 组件的工具链。
用于配置使用原生代码开发的软件组件。
类型 | 描述 |
PrebuiltLibrary | 一个不由 gradle 构建的库组件。 |
PrebuiltSharedLibraryBinary | 文件系统上已知位置存在的共享库。 |
PrebuiltStaticLibraryBinary | 文件系统上已知位置存在的静态库。 |
NativeComponentSpec | 要由 Gradle 构建以在 JVM 平台上运行的软件组件的定义。 |
NativeExecutableSpec | 要由 Gradle 构建的原生可执行组件的定义。 |
NativeLibrarySpec | 要由 Gradle 构建的原生库组件的定义。 |
NativeTestSuiteSpec | 表示将一起执行的测试套件的组件。 |
CUnitTestSuiteSpec | CUnit 测试的测试套件。 |
GoogleTestTestSuiteSpec | Google Test 测试的测试套件。 |
NativeBinarySpec | 表示构建原生组件所产生的二进制制品。 |
NativeExecutableBinarySpec | 由 Gradle 为原生应用程序构建的二进制文件。 |
NativeLibraryBinarySpec | 表示构建原生库组件所产生的二进制制品。 |
SharedLibraryBinarySpec | 由 Gradle 为原生库构建的共享库二进制文件。 |
StaticLibraryBinarySpec | 由 Gradle 为原生库构建的静态库二进制文件。 |
NativeTestSuiteBinarySpec | 运行测试套件的可执行文件。 |
CUnitTestSuiteBinarySpec | 运行 CUnit 测试套件的可执行文件。 |
GoogleTestTestSuiteBinarySpec | 运行 Google Test 测试套件的可执行文件。 |
NativePlatform | 构建原生二进制文件的目标平台。每个目标平台都给定一个名称,并且可以选择给定一个特定的 |
BuildType | 为原生二进制文件指定构建类型。常见的构建类型是“debug”和“release”,但也可以定义其他类型。 |
Flavor | 定义区分 |
AssemblerSourceSet | 一组汇编语言源。 |
CSourceSet | 一组 C 源文件。 |
CppSourceSet | 一组 C++ 源文件。 |
ObjectiveCSourceSet | 一组 Objective-C 源文件。 |
ObjectiveCppSourceSet | 一组 Objective-C++ 源文件。 |
WindowsResourceSet | 一组 Windows 资源定义文件。 |
VisualStudioProject | 一个 Visual Studio 项目,由一个或多个原生二进制文件创建。 |
VisualStudioSolution | 一个 Visual Studio 解决方案,表示构建中的一个或多个原生二进制文件。 |
NativeExecutable | 由 Gradle 构建的可执行原生组件。 |
NativeLibrary | 由 Gradle 项目构建的库组件。 |
NativeBinary | 表示特定的二进制制品。 |
NativeExecutableBinary | 针对特定平台和特定配置的 |
SharedLibraryBinary | 已编译并链接为共享库的 |
StaticLibraryBinary | 已编译并归档为静态库的 |
用于配置 C++ 组件。
类型 | 描述 |
CppApplication | C++ 应用程序的配置,定义构成应用程序的源文件以及其他设置。 |
CppLibrary | C++ 库的配置,定义构成库的源文件和头文件目录以及其他设置。 |
CppTestSuite | 一个 C++ 测试套件。 |
用于配置 Swift 组件。
类型 | 描述 |
SwiftApplication | Swift 应用程序的配置,定义构成应用程序的源文件以及其他设置。 |
SwiftLibrary | Swift 库的配置,定义构成库的源文件以及其他设置。 |
SwiftXCTestSuite | 用 Swift 实现的 XCTest 套件。 |
用于构建原生二进制文件的任务。
类型 | 描述 |
CppCompile | 将 C++ 源文件编译成目标文件。 |
SwiftCompile | 将 Swift 源文件编译成目标文件。 |
LinkExecutable | 从目标文件和库链接二进制可执行文件。 |
LinkSharedLibrary | 从目标文件和导入库链接二进制共享库。 |
CreateStaticLibrary | 从目标文件组装静态库。 |
LinkMachOBundle | 从目标文件和导入库链接二进制包。 |
InstallExecutable | 安装可执行文件及其依赖库,以便可以轻松执行。 |
InstallXCTestBundle | 创建带有运行脚本的 XCTest 包,以便可以轻松执行。 |
RunTestExecutable | 运行已编译和安装的测试可执行文件。 |
XCTest | 执行 XCTest 测试。测试始终在单个执行中运行。 |
用于构建原生二进制文件的任务。
类型 | 描述 |
CCompile | 将 C 源文件编译成目标文件。 |
Assemble | 将汇编语言源文件转换为目标文件。 |
ObjectiveCCompile | 将 Objective-C 源文件编译成目标文件。 |
ObjectiveCppCompile | 将 Objective-C++ 源文件编译成目标文件。 |
WindowsResourceCompile | 将 Windows 资源脚本编译成 .res 文件。 |