教程 > Gradle > Gradle 教程 阅读:121

Gradle 中的多项目构建

Gradle 支持多项目构建,以实现项目的快速开发。 它有助于模块化项目。 它使我们能够专注于更大项目的一个模块。 Gradle 负责处理项目其他部分产生的依赖关系。

多项目构建由一个根项目和一个或多个子项目组成。

跨项目配置

每个子项目都能够在与其他子项目完全隔离的情况下进行自我配置,因此这些子项目具有共同的特征。 最好在项目之间共享配置,这样相同的配置可以影响多个子项目。

配置和执行

在 Gradle 中,配置意味着执行项目的“build.gradle”。 默认情况下,配置是在任何任务执行之前完成的。 当请求来自项目的单个任务时,首先配置多项目构建。 配置项目后,在访问和更新 Gradle 项目的任何模块时变得更加灵活。

创建多项目

让我们创建一个包含其子项目的项目并构建 Gradle 项目。

配合下面的项目结构,其中根项目名称为 Multi_Project,子项目名称为sub_project。

创建一个新的根目录,我们要在其中创建一个多项目。 使用以下命令创建一个新目录:

$ mkdir Multi_Project

创建一个 Gradle 构建; Multi_Project 目录。 要创建 Gradle 构建,请运行 gradle init 命令。 init 命令包含 wrapper 命令本身,因此它将在根项目中创建 build.gradlesetting.gradle 文件。

下面是创建 Gradle 项目的过程:

当我们执行 init 命令时,它会询问我们要生成的项目类型。 它提供了四种类型的项目选项。 它们如下:

  • Basic
  • Application
  • Library
  • Gradle plugin

选择所需的选项并按回车键继续。

接下来,它会询问我们所需的构建脚本 DSL。 DSL 有两个可用选项:

  1. Groovy
  2. Kotlin

选择必要的 DSL 并按 ENTER 键继续。

现在它会询问我们项目名称; 我们可以提供任意项目名,如果不提供,默认以目录名作为项目名。

按 ENTER 键继续。输出结果如下:

gradle 多项目构建

然后新建 sub_project

$ mkdir sub_project

现在创建的 multi_project 的目录结构如下:

gradle 多项目构建目录结构

现在要创建一个多项目构建,在根项目构建脚本(即 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 中,可以从多项目构建的构建脚本中访问任何项目。 Gradle 的项目 API 提供了一个名为 project() 的方法; 它将路径作为参数并返回当前路径的项目对象。 当项目构建从构建脚本进行配置时,称为跨项目配置。 这是使用配置注入实现的。

考虑另一种情况。 在项目 sub_project 下还有另一个名为 Demo 的子项目。 Gradle 项目的树形结构如下:

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 多项目构建执行


仅访问子项目

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  

gradle 仅访问子项目


添加特定行为

我们可以在常见行为之上添加特定行为。 通常,我们将特定于项目的行为放在要添加特定功能的项目的构建脚本中。 为此,我们必须更新该特定项目的构建脚本。 要将特定行为添加到子项目,请更新构建脚本,如下所示:

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

gradle 添加特定行为

查看笔记

扫码一下
查看教程更方便