通常的小项目只有一个 build.gradle 文件和一个sourse tree,可是当项目规模大了以后,单模块渐渐不能知足工程师的需求。若是一个大项目被分割成更小的、相互依赖的多个子模块,那么一般会架构更清晰,更易读,这个过程实际上就是通俗意义上的“模块化”。“相互依赖”这个词很重要,这也是为何咱们一般想要经过单个构建将各个子模块连接在一块儿的缘由。java
Gradle 经过 多项目构建 来支持上述这种场景,须要注意的是 多项目构建 实际上仍是一个 Gradle 项目支持(single software component )web
与之对应的还有另外一种方法,那就是将一个大规模的软件项目分为多个组件,每个组件都由单一的 Gradle 构建来表示,本章主要介绍的是 Gradle 的多项目构建markdown
一个多项目的Gradle 构建由一个根项目(root proejct)和若干个 子项目(sub-proejct)构成。架构
最基本的多项目构建只包含一个根项目和一个子项目。下面是一个多项目构建的结构,其中包含一个名为app的子项目:app
//Project layout
.
├── app
│ ...
│ └── build.gradle
└── settings.gradle
复制代码
上面的结构就是官方推荐的Gradle 项目结构。
build init plugin
插件会生成遵循这个结构框架的项目框架
note: root project 没有 build.gradle 文件,只有 setttings.gradle 文件,这个文件用于配置哪些子项目参与构建模块化
// settings.gradle.kts
rootProject.name = "basic-multiproject"
include("app")
复制代码
在上面这个例子中,在构建时,gradle 就会在 app 目录去寻找 build.gradle 文件来执行。函数
咱们能够经过运行gradle projects
命令来查看多项目构建的结构。gradle
> gradle -q projects
------------------------------------------------------------
Root project 'basic-multiproject'
------------------------------------------------------------
Root project 'basic-multiproject'
\--- Project ':app'
To see a list of the tasks of a project, run gradle <project-path>:tasks
For example, try running gradle :app:tasks
复制代码
假设 app 子项目是一个Java应用程序,经过 application 插件和配置主类:ui
// app/build.gradle.kts
plugins {
id("application")
}
application {
mainClass.set("com.example.Hello")
}
复制代码
// app/src/main/java/com/example/Hello.java
package com.example;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
复制代码
咱们能够运行这个主函数:
> gradle -q run
Hello, world!
复制代码
如今咱们想向项目添加一个名为 ‘lib’ 的子项目,咱们须要在 setting.gradle 文件中添加一行 include
// settings.gradle.kts
rootProject.name = "basic-multiproject"
include("app")
include("lib")
复制代码
gradle 在构建时就会在 lib 文件夹内去寻找 build 文件去执行
// Project layout
.
├── app
│ ...
│ └── build.gradle.kts
├── lib
│ ...
│ └── build.gradle.kts
└── settings.gradle.kts
复制代码