gradle 中的多项目构建——迹忆客-ag捕鱼王app官网
gradle 支持多项目构建,以实现项目的快速开发。 它有助于模块化项目。 它使我们能够专注于更大项目的一个模块。 gradle 负责处理项目其他部分产生的依赖关系。
多项目构建由一个根项目和一个或多个子项目组成。
跨项目配置
每个子项目都能够在与其他子项目完全隔离的情况下进行自我配置,因此这些子项目具有共同的特征。 最好在项目之间共享配置,这样相同的配置可以影响多个子项目。
配置和执行
在 gradle 中,配置意味着执行项目的“build.gradle”。 默认情况下,配置是在任何任务执行之前完成的。 当请求来自项目的单个任务时,首先配置多项目构建。 配置项目后,在访问和更新 gradle 项目的任何模块时变得更加灵活。
创建多项目
让我们创建一个包含其子项目的项目并构建 gradle 项目。
配合下面的项目结构,其中根项目名称为 multi_project,子项目名称为sub_project。
创建一个新的根目录,我们要在其中创建一个多项目。 使用以下命令创建一个新目录:
$ mkdir multi_project
创建一个 gradle 构建; multi_project 目录。 要创建 gradle 构建,请运行 gradle init
命令。 init 命令包含 wrapper 命令本身,因此它将在根项目中创建 build.gradle 和 setting.gradle 文件。
下面是创建 gradle 项目的过程:
当我们执行 init 命令时,它会询问我们要生成的项目类型。 它提供了四种类型的项目选项。 它们如下:
- basic
- application
- library
- gradle plugin
选择所需的选项并按回车键继续。
接下来,它会询问我们所需的构建脚本 dsl。 dsl 有两个可用选项:
- groovy
- kotlin
选择必要的 dsl 并按 enter 键继续。
现在它会询问我们项目名称; 我们可以提供任意项目名,如果不提供,默认以目录名作为项目名。
按 enter 键继续。输出结果如下:
然后新建 sub_project
$ mkdir sub_project
现在创建的 multi_project 的目录结构如下:
现在要创建一个多项目构建,在根项目构建脚本(即 build.gradle)中添加以下代码片段。
closure cl = { task -> println "i'm $task.project.name" }
task('hello').dolast(cl)
project(':sub_project') {
task('hello').dolast(cl)
}
将子项目包含到根项目中。 为此,请在 setting.gradle 中添加以下语句:
rootproject.name = 'multi_project'
include 'sub_project'
使用以下命令执行它:
$ gradle -q hello
执行结果如下
在 gradle 中,可以从多项目构建的构建脚本中访问任何项目。 gradle 的项目 api 提供了一个名为 project()
的方法; 它将路径作为参数并返回当前路径的项目对象。 当项目构建从构建脚本进行配置时,称为跨项目配置。 这是使用配置注入实现的。
考虑另一种情况。 在项目 sub_project 下还有另一个名为 demo 的子项目。 gradle 项目的树形结构如下:
我们可以从根项目执行所有子项目。 为此,请重写根项目的构建脚本。 将以下代码片段添加到根项目的 build.gradle 文件中:
allprojects {
task hello {
dolast { task ->
println "i'm $task.project.name"
}
}
}
将子项目包含到根项目中。 为此,请在 setting.gradle 中添加以下语句:
rootproject.name = 'multi_project'
include 'sub_project', 'demo'
使用以下命令执行它;
$ gradle -q hello
执行结果如下所示
仅访问子项目
gradle 项目 api 还提供了一个仅用于访问子项目的属性。
定义常见行为:
我们可以定义项目和子项目的共同行为。 为此,请重写根项目构建脚本,如下所示:
allprojects {
task hello {
dolast { task ->
println "i'm $task.project.name"
}
}
}
subprojects {
hello {
dolast {
println "- i depend on multi_project"
}
}
}
使用以下命令执行它:
$ gradle -q hello
添加特定行为
我们可以在常见行为之上添加特定行为。 通常,我们将特定于项目的行为放在要添加特定功能的项目的构建脚本中。 为此,我们必须更新该特定项目的构建脚本。 要将特定行为添加到子项目,请更新构建脚本,如下所示:
allprojects {
task hello {
dolast { task ->
println "i'm $task.project.name"
}
}
}
subprojects {
hello {
dolast {
println "- i depend on multi_project"
}
}
}
project(':sub_project').hello {
dolast {
println "- i contain the project's submodule."
}
}
使用以下命令执行它:
$ gradle -q hello