有一些基本概念你应该了解,它们将有助于你编写 Gradle 脚本。
首先,Gradle 脚本是 配置脚本。当脚本执行时,它会配置一个特定类型的对象。例如,当构建脚本执行时,它会配置一个 Project
类型的对象。这个对象被称为脚本的 委托对象。下表显示了每种 Gradle 脚本类型的委托对象。
委托对象的属性和方法可在脚本中使用。
其次,每个 Gradle 脚本都实现了 Script
接口。该接口定义了可在脚本中使用的许多属性和方法。
构建脚本由零个或多个语句和脚本块组成。语句可以包括方法调用、属性赋值和局部变量定义。脚本块是接收闭包作为参数的方法调用。该闭包被视为一个 配置闭包,它在执行时会配置某个委托对象。顶层脚本块如下所示。
块 | 描述 |
allprojects { } | 配置当前项目及其每个子项目。 |
artifacts { } | 配置当前项目的已发布制品。 |
buildscript { } | 配置当前项目的构建脚本 classpath。 |
configurations { } | 配置当前项目的依赖配置。 |
dependencies { } | 配置当前项目的依赖项。 |
repositories { } | 配置当前项目的仓库。 |
sourceSets { } | 配置当前项目的源集。 |
subprojects { } | 配置当前项目的子项目。 |
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 | 一个构建器,用于构造可以解析指定组件的选定软件制品的查询。 |
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 | 已迁移到新 group 和/或 artifact ID 的 Maven 发布项的重定位信息。 |
MavenPomScm | Maven 发布项的 SCM (源代码管理)。 |
处理各种声明性元素(例如依赖项、配置、制品、任务等)的容器类型。
类型 | 描述 |
TaskContainer | 一个 |
ConfigurationContainer | 一个 |
RepositoryHandler | 一个 |
DependencyHandler | 一个 |
ComponentMetadataHandler | 允许构建提供修改被依赖软件组件元数据的规则。组件元数据规则应用于构建脚本的 dependencies 块 |
ArtifactHandler | 这个类用于定义要发布的制品并将它们添加到配置中。创建发布的制品并不意味着创建归档文件。创建的是一个表示待发布文件及其如何发布的领域对象(例如名称)。 |
连接仓库所需的凭据和认证类型
类型 | 描述 |
AuthenticationSupported | 支持用户名/密码认证的制品仓库。 |
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 | 用于配置输入规范化。目前,只能配置运行时 classpath 规范化。 |
InputNormalization | 输入规范化配置。当 Gradle 尝试确定两个任务输入是否不同时,会使用输入规范化。Gradle 会规范化两个输入,当且仅当规范化结果不同时,输入才被视为不同。 |
RuntimeClasspathNormalization | 运行时 classpath 规范化配置。 |
下面列出了每个 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 源代码生成 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 | 一个用于为一个或多个任务、文件、可发布制品或配置创建数字签名文件的任务。 |
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 | 可以在其他模块中查找 test fixtures 的依赖项修饰符 API,适用于 |
PlatformDependencyModifiers | 可以在其他模块中查找 platform 和 enforced platforms 的依赖项修饰符 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 筛选器文件(例如 |
用于定义 Artifact 转换。
类型 | 描述 |
TransformAction | Artifact 转换操作的接口。 |
TransformOutputs | Artifact 转换的输出。 |
TransformSpec | Artifact 转换注册的基本配置。 |
用于配置用于构建 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 文件。 |