gradle multi-project

建立multi-project,须要在rootProject的目录下新建settings.gradle.java

    目录: I:\gretty\hello-gradle\multi-Project


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         2014/11/8     14:04            .gradle
d----         2014/11/8     14:00            flower
d----         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.gradlegradle

include 'tree','flower'

  执行gradle projectsui

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 <project-path>:tasks
For example, try running gradle :flower:tasks

BUILD SUCCESSFUL

Total time: 4.414 secs

  这样咱们就新建了一个gradle 的multi-project的项目。lua

 涉及到multi-project的设置,有allProjects subProjects,能够对其进行配置。code

1 allProjects,包括rootProject和全部的subProject均可以根据allProject中的配置构建项目。it

allprojects {
  task printInfo << {
  println "This is ${project.name}"
}

咱们执行gradle printInfo
PS I:\gretty\hello-gradle\multi-Project> gradle printInfo
:printInfo
This is multi-Project
:flower:printInfo
This is flower
:tree:printInfo
This is tree

BUILD SUCCESSFUL

Total time: 6.189 secs

  能够看到rootProject和subProject都执行task printInfo。ast

 2 subprojects,只有子项目执行的任务class

subprojects {
	task printInfo << {
		println "Can be planted"
	}
}

PS I:\gretty\hello-gradle\multi-Project> gradle printInfo
:flower:printInfo
Can be planted
:tree:printInfo
Can be planted

BUILD 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 printInfo
PS I:\gretty\hello-gradle\multi-Project> gradle printInfo
:printInfo
This is multi-Project
:flower:printInfo
This is flower
Can be planted
Smells nice
:tree:printInfo
This is tree
Can be planted
Has leaves

BUILD SUCCESSFUL

Total time: 8.444 secs

 从上面的输出咱们也能够看得出任务的执行顺序。im

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
:printInfo
This is multi-Project
:flower:printInfo
This is flower
Smells nice
:tree:printInfo
This is tree

BUILD SUCCESSFUL

Total 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 printInfo
PS I:\gretty\hello-gradle\multi-Project> gradle printInfo
:printInfo
This is multi-Project
:flower:printInfo
This is flower
:tree:printInfo
This is tree
Has leaves

BUILD SUCCESSFUL