您应该了解一些基本概念,这将有助于您编写 Gradle 脚本。
首先,Gradle脚本是配置脚本。当脚本执行时,它会配置特定类型的对象。例如,当构建脚本执行时,它会配置类型为 的对象Project
。该对象称为
脚本的委托对象。下表显示了每种类型的 Gradle 脚本的委托。
委托对象的属性和方法可供您在脚本中使用。
其次,每个 Gradle 脚本都实现该Script
接口。该接口定义了许多可以在脚本中使用的属性和方法。
构建脚本由零个或多个语句和脚本块组成。语句可以包括方法调用、属性分配和局部变量定义。脚本块是一种以闭包作为参数的方法调用。闭包被视为配置闭包,它在执行时配置一些委托对象。下面列出了顶级脚本块。
堵塞 | 描述 |
allprojects { } | 配置此项目及其每个子项目。 |
artifacts { } | 配置该项目的已发布工件。 |
buildscript { } | 配置该项目的构建脚本类路径。 |
configurations { } | 配置该项目的依赖配置。 |
dependencies { } | 配置此项目的依赖项。 |
repositories { } | 配置该项目的存储库。 |
sourceSets { } | 配置该项目的源集。 |
subprojects { } | 配置该项目的子项目。 |
publishing { } | 配置 |
构建脚本也是 Groovy 脚本,因此可以包含 Groovy 脚本中允许的元素,例如方法定义和类定义。
下面列出了 Gradle 脚本中使用的一些主要类型:
类型 | 描述 |
Project | 该接口是您用来从构建文件与 Gradle 交互的主要 API。从 |
Task | A |
Gradle | 代表 Gradle 的调用。 |
Settings |
|
IncludedBuild | 包含在组合中的构建。 |
ProjectLayout | 提供对项目的几个重要位置的访问。 |
BuildLayout | 提供对 Gradle 构建重要位置的访问。 |
Script | 该接口由所有 Gradle Groovy DSL 脚本实现,以添加一些特定于 Gradle 的方法。由于您编译的脚本类将实现此接口,因此您可以直接在脚本中使用此接口声明的方法和属性。 |
SourceSet | A |
SourceSetOutput | 所有输出目录(编译的类、处理的资源等)的集合 - 请注意 |
SourceDirectorySet | A |
Configuration | A |
ConsumableConfiguration | 可以 |
ResolvableConfiguration |
|
DependencyScopeConfiguration | 收集依赖项 |
ResolutionStrategy | 定义围绕依赖解析的策略。例如,强制某些依赖项版本、替换、冲突解决或快照超时。 |
ArtifactResolutionQuery | 用于构造查询的构建器,该查询可以解析指定组件的选定软件工件。 |
ComponentSelection | 表示模块的组件选择器和组件选择规则中要评估的候选版本的元组。 |
ComponentSelectionRules | 表示组件选择规则的容器。规则可以作为配置的解决策略的一部分应用,并且规则可以明确地接受或拒绝各个组件。既不接受也不拒绝的组件将遵循默认的版本匹配策略。 |
DependencyCollector | A |
ExtensionAware | 可以在运行时用其他对象扩展的对象。 |
ExtraPropertiesExtension | Gradle 域对象的附加、临时属性。 |
PluginDependenciesSpec | 用于声明要在脚本中使用的插件的 DSL。 |
PluginDependencySpec | 对插件的依赖的可变规范。 |
PluginManagementSpec | 配置插件的解析方式。 |
ProviderFactory | 用于创建 的实例的工厂 |
ResourceHandler | 提供对特定于资源的实用程序方法的访问,例如创建各种资源的工厂方法。 |
TextResourceFactory | 创建 |
InputChanges | 提供对需要由增量工作操作处理的任何输入文件的访问。 |
Distribution | 发行版允许捆绑应用程序或库,包括依赖项、源... |
下面列出了用于配置发布的类型:
类型 | 描述 |
PublishingExtension | 配置如何“发布”项目的不同组件。 |
IvyPublication | An |
IvyArtifact | |
IvyArtifactSet |
|
IvyModuleDescriptorSpec | 任何 Ivy 出版物的描述符。 |
IvyModuleDescriptorAuthor | 常春藤出版物的作者。 |
IvyModuleDescriptorLicense | 常春藤出版物的许可证。 |
IvyModuleDescriptorDescription | Ivy 出版物的描述。 |
MavenPublication | A |
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 | 已移动到新组和/或工件 ID 的 Maven 发布的重定位信息。 |
MavenPomScm | Maven 发布的 SCM(源代码控制管理)。 |
处理各种声明性元素(例如依赖项、配置、工件、任务等)的容器类型:
类型 | 描述 |
TaskContainer | A |
ConfigurationContainer | A |
RepositoryHandler | A |
DependencyHandler | A |
ComponentMetadataHandler | 允许构建提供修改依赖的软件组件的元数据的规则。组件元数据规则应用于
|
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 | 用于配置输入标准化。目前,只能配置运行时类路径规范化。 |
InputNormalization | 输入标准化配置。当 Gradle 尝试确定两个任务输入是否不同时,将使用输入标准化。 Gradle 对两个输入进行标准化,当且仅当标准化不同时,输入才被视为不同。 |
RuntimeClasspathNormalization | 运行时类路径规范化的配置。 |
以下是每个 Gradle 项目可用的任务类型。这些任务类型也可以直接在构建脚本中声明和配置。
类型 | 描述 |
TaskReportTask | 显示项目中的任务列表。当您 |
ProjectReportTask | 显示构建中的项目列表。当您 |
DependencyReportTask | 显示项目的依赖关系树。当您 |
DependencyInsightReportTask | 生成一份报告,尝试回答以下问题: |
PropertyReportTask | 显示项目的属性。当您 |
ComponentReport | 显示有关项目生成的软件组件的一些详细信息。 |
DependentComponentsReport | 显示依赖组件。 |
ModelReport | 显示有关项目配置模型的一些详细信息。当您 |
OutgoingVariantsReportTask | 在命令行上报告项目的传出变体的任务。这对于列出项目在变体方面产生的内容以及每个变体附加了哪些工件非常有用。在这种情况下,变体必须被理解为“一个项目产生的东西可以被另一个项目安全地使用”。 |
ResolvableConfigurationsReportTask | 报告可以在命令行上解析的项目配置的任务。这对于确定哪些属性与用于解析项目依赖项的可解析配置相关联非常有用。输出可以帮助预测每个依赖项的哪个变体将得到解决。 |
下面列出了可在构建脚本中使用的各种任务类型:
类型 | 描述 |
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 | 将 a 发布 |
ScalaCompile | 编译 Scala 源文件,也可以编译 Java 源文件。 |
ScalaDoc | 为 Scala 源文件生成 HTML API 文档。 |
InitBuild | 生成 Gradle 项目结构。 |
Sign | 为一个或多个创建数字签名文件的任务;任务、文件、可发布的工件或配置。 |
Sync | 将目标目录的内容与某些源目录和文件同步。 |
Tar | 组装 TAR 存档。 |
AbstractTestTask | 所有测试任务的抽象类。 |
Test | 执行 JUnit(3.8.x、4.x 或 5.x)或 TestNG 测试。测试始终在(一个或多个)单独的 JVM 中运行。 |
TestReport | 根据一项或多项任务的结果生成 HTML 测试报告 |
War | 组装 WAR 档案。 |
Wrapper | 生成脚本(适用于 *nix 和 windows),允许您使用 Gradle 构建项目,而无需安装 Gradle。 |
WriteProperties |
|
Zip | 组装 ZIP 存档。默认是压缩 zip 的内容。 |
下面列出了与建模测试套件相关的任务和可配置对象:
类型 | 描述 |
TestingExtension | 该 DSL 元素的存在是为了包含 s 的集合 |
TestSuite | 基本测试套件组件。测试套件是测试的集合。 |
JvmTestSuite | 测试套件是基于 JVM 的测试的集合。 |
TestSuiteTarget | 基本测试套件目标。测试套件目标是在特定上下文(操作系统、Java 运行时等)中运行的测试的集合。 |
JvmTestSuiteTarget |
|
Test | 执行 JUnit(3.8.x、4.x 或 5.x)或 TestNG 测试。测试始终在(一个或多个)单独的 JVM 中运行。 |
Dependencies | 适用于所有 |
GradleDependencies | 依赖 API 可用于 |
TestFixturesDependencyModifiers | 依赖修饰符 API,可以在其他模块中查找 |
PlatformDependencyModifiers | 依赖修饰符 API,可以在 |
JvmComponentDependencies | 该 DSL 元素用于向组件添加依赖项,例如 |
下面列出了生成报告时使用的一些类型:
类型 | 描述 |
CustomizableHtmlReport | 可以使用 XSLT 样式表自定义其生成的 HTML 报告。 |
SingleFileReport | 报告是单个文件。 |
DirectoryReport | 要创建的基于目录的报告。 |
Report | 要创建的基于文件的报告。 |
Reporting | 提供报告选项的对象。 |
ReportContainer |
|
ReportingExtension | 名为“reporting”的项目扩展,提供基本的报告设置和实用程序。 |
AggregateTestReport | 用于聚合测试报告输入的容器。 |
JacocoCoverageReport | 用于聚合 JaCoCo 代码覆盖率报告输入的容器。 |
用于配置Eclipse或IDEA插件
类型 | 描述 |
EclipseModel | DSL 友好模型的 Eclipse 项目信息。自定义 Eclipse 项目生成的第一个切入点。 |
EclipseProject | 启用 Eclipse 插件的项目详细信息(.project 文件)的微调 |
EclipseClasspath | 生成的 Eclipse 项目的构建路径设置。任务使用它
|
EclipseJdt | 启用 Eclipse 插件的 jdt 细节微调 |
EclipseWtp | 启用 Eclipse 插件的 wtp/wst 细节微调 |
EclipseWtpComponent | 允许微调 Eclipse 插件的 wtp 组件详细信息 |
EclipseWtpFacet | 启用 Eclipse 插件的 wtp 方面详细信息的微调 |
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 组件的工具链。
用于配置使用本机代码开发的软件组件。
用于配置 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 文件。 |