Gradle配置中subprojects 和 allprojects 的区别

Gradle系列相关文章
1、Gradle理论与实践一:Gradle入门
2、Gradle理论与实践二:Groovy介绍
3、Gradle理论与实践三:Gradle构建脚本基础
4、Gradle理论与实践四:自定义Gradle插件
5、Gradle配置subprojects和allprojects的区别:subprojects和allprojects的区别

subprojects 和 allprojects 的区别,先给出结论: allprojects是对所有project的配置,包括Root Project;而subprojects是对所有Child Project的配置

举个例子:

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

示例
settings.gradle中写入:

include ':app',':lib'

build.gradle中写入:

allprojects {

    tasks.create('hello') {
        doLast {
            task ->
                print "project name is $task.project.name \n"
        }
    }
}

测试一下allprojects的范围,打开控制台,并切换到新建的根目录,执行gradle -q hello命令,执行结果:

bogon:test_gradle mq$ gradle -q hello
project name is test_gradle 
project name is app 
project name is lib 

再来测试下subprojects的作用域,打开build.gradle继续写入:

allprojects {

    tasks.create('hello') {
        doLast {
            task ->
                print "project name is $task.project.name \n"
        }
    }
 }

subprojects {
    hello << {
        print "here is subprojects \n"
    }
 }

可以看到我们在下面新加了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 

可以看到只有只有根目录下面没有subprojectstask的输出,这也印证了我们上面的结论:allprojects是对所有project的配置,包括Root Project;而subprojects是对所有Child Project的配置。

进入Child Project目录下,新建一个build.gradle文件,写入:

hello.doLast {
   print " —— I'm the app project \n"
}

继续执行命令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 

可以看到task(hello)遍历顺序是:allprojects > subprojects > Child Project

扩展

rootProject下的build.gradle中,buildscript的repositories和allprojects的repositories有什么区别?如下:

//build.gradle
buildscript {
    repositories {
        jcenter()
        google()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
    }
}

allprojects {
    repositories {
        jcenter()
        google()
        maven {
            url "http://maven.xxxxxxxx/xxxxx"
        }
    }
}
  • buildscript里是gradle脚本执行所需依赖,如上所示对应的是maven库和插件
  • allprojects里是项目本身需要的依赖,比如代码中某个类是打包到maven私有库中的,那么在allprojects—>repositories中需要配置maven私有库,而不是buildscript中,不然找不到。
  • 14
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_小马快跑_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值