您应该理解一些基本概念,这将帮助您编写 Gradle 脚本。
首先,Gradle 脚本是 配置脚本。当脚本执行时,它会配置特定类型的对象。例如,当构建脚本执行时,它会配置 Project
类型的对象。此对象称为脚本的委托对象。下表显示了每种 Gradle 脚本类型的委托。
委托对象的属性和方法可供您在脚本中使用。
其次,每个 Gradle 脚本都实现了 Script
接口。此接口定义了许多您可以在脚本中使用的属性和方法。
构建脚本由零个或多个语句和脚本块组成。语句可以包括方法调用、属性赋值和局部变量定义。脚本块是方法调用,它将闭包作为参数。闭包被视为配置闭包,它在执行时配置某些委托对象。顶级脚本块如下所示。
块 | 描述 |
allprojects { } | 配置此项目及其每个子项目。 |
artifacts { } | 配置此项目已发布的 Artifact。 |
buildscript { } | 配置此项目的构建脚本类路径。 |
configurations { } | 配置此项目的依赖配置。 |
dependencies { } | 配置此项目的依赖项。 |
repositories { } | 配置此项目的仓库。 |
sourceSets { } | 配置此项目的源集。 |
subprojects { } | 配置此项目的子项目。 |
publishing { } | 配置由 publishing 插件添加的 |
构建脚本也是 Groovy 脚本,因此可以包含 Groovy 脚本中允许的那些元素,例如方法定义和类定义。
下面列出的是 Gradle 脚本中使用的一些中心类型
类型 | 描述 |
Project | 此接口是您用来从构建文件与 Gradle 交互的主要 API。从 |
Task |
|
Gradle | 表示 Gradle 的调用。 |
Settings | 声明实例化和配置要参与构建的 |
IncludedBuild | 包含在组合构建中的构建。 |
ProjectLayout | 提供对项目几个重要位置的访问。 |
BuildLayout | 提供对 Gradle 构建重要位置的访问。 |
Script | 所有 Gradle Groovy DSL 脚本都实现了此接口,以添加一些 Gradle 特定的方法。由于您的已编译脚本类将实现此接口,因此您可以直接在脚本中使用此接口声明的方法和属性。 |
SourceSet |
|
SourceSetOutput | 所有输出目录(编译的类、处理的资源等)的集合 - 请注意 |
SourceDirectorySet |
|
Configuration |
|
ConsumableConfiguration | 一个 |
ResolvableConfiguration | 一个 |
DependencyScopeConfiguration | 一个 |
ResolutionStrategy | 定义围绕依赖项解析的策略。例如,强制某些依赖项版本、替换、冲突解决或快照超时。 |
ArtifactResolutionQuery | 一个构建器,用于构造可以解析指定组件的选定软件 Artifact 的查询。 |
ComponentSelection | 表示模块的组件选择器和要在组件选择规则中评估的候选版本的元组。 |
ComponentSelectionRules | 表示组件选择规则的容器。规则可以作为配置的 resolutionStrategy 的一部分应用,并且可以通过规则显式接受或拒绝单个组件。既未接受也未拒绝的组件将受到默认版本匹配策略的约束。 |
DependencyCollector |
|
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 发布版本的问题管理系统。 |
MavenPomLicense | Maven 发布版本的许可证。 |
MavenPomLicenseSpec | 允许向 Maven 发布版本添加许可证。 |
MavenPomMailingList | Maven 发布版本的邮件列表。 |
MavenPomMailingListSpec | 允许向 Maven 发布版本添加邮件列表。 |
MavenPomOrganization | Maven 发布版本的组织。 |
MavenPomRelocation | 已移动到新组和/或 Artifact ID 的 Maven 发布版本的重定位信息。 |
MavenPomScm | Maven 发布版本的 SCM(源代码控制管理)。 |
处理各种声明性元素(例如,依赖项、配置、Artifact、任务等)的容器类型
类型 | 描述 |
TaskContainer |
|
ConfigurationContainer |
|
RepositoryHandler |
|
DependencyHandler |
|
ComponentMetadataHandler | 允许构建提供规则,以修改所依赖软件组件的元数据。组件元数据规则应用于构建脚本的 dependencies 块 |
ArtifactHandler | 此类用于定义要发布的 Artifact 并将其添加到配置中。创建发布 Artifact 并不意味着创建归档文件。创建的是域对象,该对象表示要发布的文件以及有关应如何发布的信息(例如,名称)。 |
用于连接到仓库的凭据和身份验证类型
类型 | 描述 |
AuthenticationSupported | 支持用户名/密码身份验证的 Artifact 仓库。 |
Credentials | 用于不同身份验证目的的凭据的基本接口。(例如,经过身份验证的 |
PasswordCredentials | 用户名/密码凭据,可用于登录受密码保护的远程仓库。 |
AwsCredentials | 表示用于向 Amazon Web Services 进行身份验证的凭据。 |
HttpHeaderCredentials | 可用于通过使用 HTTP 标头登录受保护服务器(例如,远程仓库)的凭据。用于从属性创建凭据的属性是 |
AuthenticationContainer | 用于配置 |
Authentication | 传输身份验证方案的基本接口。 |
BasicAuthentication | 通过 HTTP 进行基本访问身份验证的身份验证方案。使用此方案时,会抢先发送凭据。 |
HttpHeaderAuthentication | 通过 HTTP 进行 HTTP 标头身份验证的身份验证方案。 |
DigestAuthentication | 通过 HTTP 进行摘要访问身份验证的身份验证方案。 |
用于连接和配置构建缓存的类型
类型 | 描述 |
BuildCacheConfiguration | 整个 Gradle 构建的 构建缓存的配置。 |
DirectoryBuildCache | 本地目录构建缓存的配置对象。 |
HttpBuildCache | HTTP 构建缓存的配置对象。缓存条目通过 GET 加载,并通过 PUT 请求存储。 |
用于配置输入规范化的类型
类型 | 描述 |
InputNormalizationHandler | 用于配置输入规范化。目前,只能配置运行时类路径规范化。 |
InputNormalization | 输入规范化配置。当 Gradle 尝试确定两个任务输入是否不同时,将使用输入规范化。Gradle 会规范化两个输入,并且仅当规范化不同时,输入才被视为不同。 |
RuntimeClasspathNormalization | 运行时类路径规范化的配置。 |
以下是每个 Gradle 项目可用的任务类型。这些任务类型也可以在构建脚本中直接声明和配置。
类型 | 描述 |
TaskReportTask | 显示项目中的任务列表。当您从命令行执行 |
ProjectReportTask | 显示构建中的项目列表。当您从命令行执行 |
DependencyReportTask | 显示项目的依赖关系树。当您从命令行执行 |
DependencyInsightReportTask | 生成一份报告,尝试回答如下问题 |
PropertyReportTask | 显示项目的属性。当您从命令行执行 |
ComponentReport | 显示有关项目生成的软件组件的一些详细信息。 |
DependentComponentsReport | 显示依赖组件。 |
ModelReport | 显示有关项目配置模型的一些详细信息。当您从命令行执行 |
OutgoingVariantsReportTask | 一个任务,用于在命令行上报告项目的传出变体。这对于列出项目在变体方面生成的内容以及附加到每个变体的 Artifact 非常有用。在这种上下文中,变体必须理解为“项目生成的可由另一个项目安全使用的内容”。 |
ResolvableConfigurationsReportTask | 一个任务,用于报告项目的可解析配置,这些配置可以在命令行上解析。这对于确定哪些属性与用于解析项目依赖项的可解析配置相关联非常有用。输出可以帮助预测将解析每个依赖项的哪个变体。 |
ArtifactTransformsReportTask | 一个任务,用于报告有关项目使用的 Artifact 转换(由 |
下面列出的是可在构建脚本中使用的各种任务类型
类型 | 描述 |
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 源代码生成 HTML API 文档,以及可选的 Java 源代码。 |
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 | 用于为一个或多个任务、文件、可发布 Artifact 或配置创建数字签名文件的任务。 |
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 中运行。 |
Dependencies | 所有 |
GradleDependencies | 可用于可以构建依赖于 Gradle API 的软件的 |
TestFixturesDependencyModifiers | 依赖项修饰符 API,可以在其他模块中查找 |
PlatformDependencyModifiers | 依赖项修饰符 API,可以在其他模块中查找 |
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 scheme 文件(例如 |
GenerateWorkspaceSettingsFileTask | 用于生成 Xcode 工作区设置文件(例如 |
GenerateXcodeProjectFileTask | 用于生成 Xcode 项目文件(例如 |
GenerateXcodeWorkspaceFileTask | 用于生成 Xcode 工作区文件(例如 |
Visual Studio IDE 插件贡献的任务。要配置 IDE 插件,请使用 IDE 模型类型。
类型 | 描述 |
GenerateSolutionFileTask | 用于生成 Visual Studio 解决方案文件(例如 |
GenerateProjectFileTask | 用于生成 Visual Studio 项目文件(例如 |
GenerateFiltersFileTask | 用于生成 Visual Studio 过滤器文件(例如 |
用于定义构件转换。
类型 | 描述 |
TransformAction | 构件转换操作的接口。 |
TransformOutputs | 构件转换的输出。 |
TransformSpec | 构件转换注册的基础配置。 |
用于配置构建 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 | 一个 XCTest 套件,以 Swift 实现。 |
用于构建原生二进制文件的任务。
类型 | 描述 |
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 文件。 |