多项目结构
多项目结构
每一个活跃的项目会随着时间慢慢增长的,一开始可能只是个很小的项目到后面可能包含很多包和类。为了提高可维护性和解藕的目的,你可能想把项目根据逻辑和功能来划分成一个个模块。模块通常按照等级来组织,相互之间可以定义依赖。
子项目定义
在
include 'sub-project1', 'sub-project2', 'sub-project3',
它表示在当前的项目下建立三个子项目,分别为’sub-project1’, ‘sub-project2’, ‘sub-project3’。默认情况下,每个子项目的名称对应着当前操作系统目录下的一个子目录。当
Root:<Level1-子节点>:<Level2-子节点>:<Level3-子节点>
也可以简写成 :<Level1-子节点>:<Level2-子节点>:<Level3-子节点>
。借助这种路径的定义方式,我们可以在
例如,我们有个产品
include 'core', 'web', 'mobile'
按照之前描述的,
$ gradle projects
:projects
------------------------------------------------------------
Root project
------------------------------------------------------------
Root project 'A'
+--- Project ':core'
+--- Project ':mobile'
\--- Project ':web
结果一目了然,首先是
A
--settings.gradle
--build.gradle
--core
--build.gradle
--web
--build.gradle
--mobile
--build.gradle
如果你不喜欢这种默认的结构,也可以按照如下方式定义子项目的名称和物理目录结构:
include(':core)
project(':core').projectDir = new File(settingsDir, 'core-xxx')
include(':web)
project(':web').projectDir = new File(settingsDir, 'web-xxx')
include(':mobile)
project(':mobile').projectDir = new File(settingsDir, 'mobile-xxx')
在这个例子中,子项目
接下来,考虑一个更复杂的情况,随着产品的发展,
include 'android', 'ios'
现在,
A
--settings.gradle
--core
--build.gradle
--web
--build.gradle
--mobile
--settings.gradle
--ios
--build.gradle
--android
--build.gradle
子项目任务继承
在gradle <Task>
时,
对于大多数构建工具,对于子项目的配置,都是基于继承的方式。
allprojects {
task hello << {task -> println "I'm $task.project.name"
}
subprojects {
allprojects {
task hello << {task -> println "I'm $task.project.name"
}
}
allprojects {
task hello << {task -> println "I'm $task.project.name" }
}
subprojects {
hello << {println "- I am the sub project of A"}
}
project(':core').hello << {
println "- I'm the core component and provide service for other parts."
}
对于上面所示的代码,已经很表意了:
-
allprojects{xxx}
这段代码表示,对于所有的project ,Gradle 都将定义一个名称是hello 的Task { println "I'm $task.[project.name](http://project.name/)"}
。 -
subprojects{xxxx}
的这段代码表示,对于所有的子project ,将在名称为hello 的Task 上追加Action {println "- I am the sub project of A"}
-
project(':core')
的这段代码表示,对于名称为core 的project ,将在名称为hello 的Task 上追加Action { println "- I'm the core component and provide service for other parts." }