Gradle配置中subprojects 和 allprojects 的区别

subprojects 和 allprojects 的区别,先给出结论,然后通过一个例子来佐证结论。

结论:allprojects是对所有project的配置,包括Root Project。而subprojects是对所有Child Project的配置

举个例子:

新建一个test_gradle的文件夹,在文件夹里新建build.gradle和settings.gradle文件,另外再新建两个文件夹,名字分别为app lib,如下图所示:

Gradle配置中subprojects 和 allprojects 的区别

在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

相关推荐