Gradle配置中subprojects 和 allprojects 的区别
subprojects 和 allprojects 的区别,先给出结论,然后通过一个例子来佐证结论。
结论:allprojects是对所有project的配置,包括Root Project。而subprojects是对所有Child Project的配置
举个例子:
新建一个test_gradle的文件夹,在文件夹里新建build.gradle和settings.gradle文件,另外再新建两个文件夹,名字分别为app lib,如下图所示:
在settings.gradle中写入:
include ':app',':lib'
1
在build.gradle中写入:
allprojects {
tasks.create('hello') {
doLast {
task ->
print "project name is $task.project.name "
}
}
}
1
2
3
4
5
6
7
8
9
测试一下allprojects的范围,打开控制台,并切换到新建的根目录,执行gradle -q hello命令,执行结果:
bogon:test_gradle mq$ gradle -q hello
project name is test_gradle
project name is app
project name is lib
1
2
3
4
再来测试下subprojects的作用域,打开build.gradle继续写入:
allprojects {
tasks.create('hello') {
doLast {
task ->
print "project name is $task.project.name "
}
}
}
subprojects {
hello << {
print "here is subprojects "
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
可以看到我们在下面新加了subprojects,并通过之前建的task任务hello输出了一段字符串,继续执行命令gradle -q hello,执行结果:
bogon:test_gradle mq$ gradle -q hello
project name is test_gradle
project name is app
here is subprojects
project name is lib
here is subprojects
1
2
3
4
5
6
7
8
可以看到只有只有根目录下面没有subprojects中task的输出,这也印证了我们上面的结论:allprojects是对所有project的配置,包括Root Project。而subprojects是对所有Child Project的配置。
进入Child Project目录下,新建一个build.gradle文件,写入:
hello.doLast {
print " —— I'm the app project "
}
1
2
3
继续执行命令gradle -q hello,执行结果:
bogon:test_gradle mq$ gradle -q hello
project name is test_gradle
project name is app
here is subprojects
—— I'm the app project
project name is lib
here is subprojects
1
2
3
4
5
6
7
8
9
可以看到遍历顺序是:allprojects > subprojects > Child Project
---------------------
作者:-小马快跑-
原文:https://blog.csdn.net/u013700502/article/details/85231687