1. 多项目构建的结构
- 在项目的根目录或主目录中都有一个
settings.gradle
文件。 - 根目录或主目录都有一个
build.gradle
文件。 - 具有自己的
*.gradle
构建文件的子目录(某些多项目构建可能会省略子项目构建脚本)。
1.1 列出构建文件中的所有项目
$ gradle -q projects
2. 指定常规构建配置
在根项目中的
build.gradle
文件中,常规配置可以应用于所有项目或仅应用于子项目。
allprojects {
group = 'com.example.gradle'
version = '0.1.0'
}
subprojects {
apply plugin: 'java'
apply plugin: 'eclipse'
}
Project API提供了一个属性
allprojects
,它返回当前项目及其下面所有子项目的列表。如果使用闭包调用allprojects
,则闭包的语句将委派给与所有项目相关联的项目。当然也可以通过allprojects.each
进行迭代,但这将更冗长。
2.1 访问具体某个项目
Gradle允许从构建脚本中访问多项目构建的任何项目。Project API提供了一个名称为
project()
的方法,它将一个路径作为参数,并返回此路径的Project
对象。
如:
project(':bluewhale').hello << {
println "- I'm the largest animal that has ever lived on this planet."
}
3. 一个Gradle多项目构建示例
3.1 项目布局如下:
water/
build.gradle
settings.gradle
bluewhale/
build.gradle
krill/
build.gradle
3.2 各文件内容
3.2.1 build.gradle
/*
* 注意两个代码片段引用“hello”任务。
* 第一个,它使用“task”关键字,构建任务并提供它的基本配置。
* 第二部分不使用“task”关键字,因为它进一步配置现有的“hello”任务。
* 只能在项目中构建一次任务,但可以添加任意数量的代码块以提供其他配置。
*/
allprojects {
task hello << {task -> println "I'm $task.project.name" }
}
subprojects {
hello << {println "- I depend on water"}
}
// Project API提供了一个名称为`project()`的方法,它将一个路径作为参数,并返回此路径的`Project`对象。
// 通常把项目特定的行为放入这个项目的构建脚本中
/*
project(':bluewhale').hello << {
println "- I'm the largest animal that has ever lived on this planet."
}
*/
3.2.2 settings.gradle
include 'bluewhale', 'krill'
3.2.3 bluewhale/build.gradle
hello.doLast {
println "- I'm the largest animal that has ever lived on this planet."
}
4.2.4 krill/build.gradle
hello.doLast {
println "- The weight of my species in summer is twice as heavy as all human beings."
}
3.3 执行
在项目根路径下执行
# E:\program\gradleStudy\water
$ gradle -q hello
# 输出:
$ I'm water
I'm bluewhale
- I depend on water
- I'm the largest animal that has ever lived on this planet.
I'm krill
- I depend on water
- The weight of my species in summer is twice as heavy as all human beings.