创建multi-project,需要在rootProject的目录下新建settings.gradle.
目录: I:\gretty\hello-gradle\multi-ProjectMode LastWriteTime Length Name---- ------------- ------ ----d---- 2014/11/8 14:04 .gradled---- 2014/11/8 14:00 flowerd---- 2014/11/8 14:00 tree-a--- 2014/11/8 14:11 267 build.gradle-a--- 2014/11/8 14:05 23 settings.gradle
根据上面的目录我们可以像这样设置settings.gradle
include 'tree','flower'
执行gradle projects
PS I:\gretty\hello-gradle\multi-Project> gradle projects:projects------------------------------------------------------------Root project------------------------------------------------------------Root project 'multi-Project'+--- Project ':flower'\--- Project ':tree'To see a list of the tasks of a project, run gradle:tasksFor example, try running gradle :flower:tasksBUILD SUCCESSFULTotal time: 4.414 secs
这样我们就新建了一个gradle 的multi-project的项目。
涉及到multi-project的设置,有allProjects subProjects,可以对其进行配置。
1 allProjects,包括rootProject和所有的subProject都可以根据allProject中的配置构建项目。
allprojects { task printInfo << { println "This is ${project.name}"}我们执行gradle printInfoPS I:\gretty\hello-gradle\multi-Project> gradle printInfo:printInfoThis is multi-Project:flower:printInfoThis is flower:tree:printInfoThis is treeBUILD SUCCESSFULTotal time: 6.189 secs
可以看到rootProject和subProject都执行task printInfo。
2 subprojects,只有子项目执行的任务
subprojects { task printInfo << { println "Can be planted" }}PS I:\gretty\hello-gradle\multi-Project> gradle printInfo:flower:printInfoCan be planted:tree:printInfoCan be plantedBUILD SUCCESSFUL
3 我们还可以使用project(":tree"),来指定项目运行任务
allprojects {task printInfo << {println "This is ${project.name}"}}subprojects { printInfo << { println "Can be planted" }}project(':tree').printInfo << { println "Has leaves"}project(':flower') { printInfo.doLast { println 'Smells nice' }}执行 gradle printInfoPS I:\gretty\hello-gradle\multi-Project> gradle printInfo:printInfoThis is multi-Project:flower:printInfoThis is flowerCan be plantedSmells nice:tree:printInfoThis is treeCan be plantedHas leavesBUILD SUCCESSFULTotal time: 8.444 secs
从上面的输出我们也可以看得出任务的执行顺序。
4 过滤配置
allprojects { task printInfo << { println "This is ${project.name}" }}configure(allprojects.findAll { it.name.startsWith('f') }) { printInfo << { println 'Smells nice' }}PS I:\gretty\hello-gradle\multi-Project> gradle printInfo:printInfoThis is multi-Project:flower:printInfoThis is flowerSmells nice:tree:printInfoThis is treeBUILD SUCCESSFULTotal time: 8.195 secs
使用afterEvaluate 进行过滤
allprojects {task printInfo << {println "This is ${project.name}"}}subprojects {afterEvaluate { project ->if (project.hasLeaves) {project.printInfo << {println 'Has leaves'}}}}project(':flower') {ext.hasLeaves = false}project(':tree') {ext.hasLeaves = true}执行gradle printInfoPS I:\gretty\hello-gradle\multi-Project> gradle printInfo:printInfoThis is multi-Project:flower:printInfoThis is flower:tree:printInfoThis is treeHas leavesBUILD SUCCESSFUL