1. 概述
在这个教程中,我们将了解Gradle构建脚本块(build.gradle文件中的脚本)并详细理解buildScript
块的作用。
2. 引言
2.1. 什么是Gradle?
它是一个构建自动化工具,负责诸如编译、打包、测试、部署、发布、依赖关系解决等任务。没有这个工具,我们需要手动完成这些任务,这既复杂又耗时。在当今的软件开发中,如果没有这样的构建工具,工作会变得非常困难。
2.2. Gradle的常见构建脚本块
在这个部分,我们将简要了解最常见的构建脚本块。allProjects、subProjects、plugins、dependencies、repositories、publishing和buildScript是最常见的构建脚本块。以下列表介绍了这些块的概念:
- allProjects(org.gradle.api.Project)块配置根项目及其所有子项目。
- subProjects(同样,org.gradle.api.Project)与allProjects不同,只配置子项目。
- plugins通过引入一组有用的功能扩展Gradle的能力。例如,java插件添加了assemble、build、clean、jar、文档等任务,以及其他更多功能。
- dependencies(/gradle-dependency-management)顾名思义,是声明项目所需所有jar的地方。
- repositories(声明仓库)块包含Gradle从何处下载在dependencies块中声明的jar的位置。可以声明多个位置,它们按照声明的顺序执行。
- publishing(org.gradle.api.Project)块在我们开发库并希望发布时声明。此块包含库jar的坐标以及包含发布位置的repositories块。
现在,考虑一个场景:我们想在构建脚本中使用库。在这种情况下,我们不能使用dependencies块,因为它包含的是项目classpath上所需的jar。
由于我们想在构建脚本本身中使用库,因此需要将该库添加到脚本classpath上,这就是buildScript
的作用。下一节将深入讨论buildScript
块,结合这个用例。
3. buildScript
块的目的
考虑到上述场景,假设在Spring Boot应用中,我们想要在构建脚本中读取application.yml文件中定义的属性。为了实现这一点,我们可以使用名为snakeyaml的库,它能够轻松解析YAML文件并读取属性。
如上所述,我们需要将该库添加到脚本classpath上。解决方案是在buildScript
块中添加依赖项。
示例代码展示了如何读取application.yml文件中的temp.files.path
属性。buildScript
块包含snakeyaml库的依赖项和下载它的仓库位置:
import org.yaml.snakeyaml.Yaml
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath group: 'org.yaml', name: 'snakeyaml', version: '1.19'
}
}
plugins {
//plugins
}
def prop = new Yaml().loadAll(new File("$projectDir/src/main/resources/application.yml")
.newInputStream()).first()
var path = prop.temp.files.path
path
变量包含temp.files.path
的值。
关于buildScript
块的更多信息:
- 它可以包含除项目类型依赖项以外的任何类型的依赖项。
- 对于多项目构建,声明的依赖项对所有子项目的构建脚本都可用。
- 要向项目添加作为外部jar可用的二进制插件,应将它们添加到构建脚本classpath,然后应用插件。
4. 总结
在这个教程中,我们学习了Gradle的使用、常见构建脚本块的目的,并深入探讨了一个实际用例中的buildScript
块。