gradle的多项目构建(九)
目錄
- 1. 概念
- 2. settings
- 3. task
- 4. 屬性繼承
1. 概念
在Android Studio中,一個(gè)模塊和一個(gè)項(xiàng)目是有區(qū)別的。一個(gè)項(xiàng)目包含多個(gè)模塊module。而Android Studio中的每一個(gè)module對(duì)應(yīng)的是Gradle多項(xiàng)目構(gòu)建中的一個(gè)項(xiàng)目
為什么需要多項(xiàng)目構(gòu)建呢?模塊通常具有層次結(jié)構(gòu)而且可以定義為相互依賴。Gradle對(duì)構(gòu)建多模塊項(xiàng)目提供了強(qiáng)大的支持,Gradle中的每一模塊都是一個(gè)項(xiàng)目。
2. settings
在多項(xiàng)目構(gòu)建中,settings文件聲明了所需的配置來實(shí)例化項(xiàng)目的層次結(jié)構(gòu)。在默認(rèn)情況下,這個(gè)文件被命名為settings.gradle,并且和根項(xiàng)目的build.gradle 文件放在一起。
如果rootProject下面有兩個(gè)module,sub_project1和sub_project2,結(jié)構(gòu)如下:
rootProject
- settings.gradle
- build.gradle
- sub_project1
- build.gradle
- sub_project2
- build.gradle
- subs
- sub_project3
- build.gradle
- sub_project3
在項(xiàng)目的settings.gradle中需要聲明成:
// : 后面是相對(duì)于根目錄的項(xiàng)目目錄 include ':sub_project1', 'sub_project2'// 引入子模塊下面的module include ':subs:sub_project3'3. task
我們可以定義一些項(xiàng)目公共的行為task
// allprojects(根項(xiàng)目和子項(xiàng)目都有效) allprojects{task allTaskHello <<{println "hello from ${project.name}"} }// 對(duì)子項(xiàng)目有效 subprojects{task subTaskHello <<{println "hello from sub project ${project.name}"} }如果task沒有聲明依賴另一個(gè)task,在多項(xiàng)目構(gòu)建中位于根目錄的task總是先執(zhí)行。對(duì)于子項(xiàng)目來說,執(zhí)行順序完全取決于項(xiàng)目名稱的字母順序。例如,sub_project1在sub_project2之前。記住,在settings文件中子項(xiàng)目的聲明順序完全不影響其執(zhí)行順序。
多項(xiàng)目之間一般不會(huì)是毫無關(guān)聯(lián)的,可能會(huì)存在依賴關(guān)系。比如sub-project1中有taskA和taskB,taskA依賴于taskB,而taskB依賴于sub_project2中的taskC。到目前為止,我們把子項(xiàng)目中的屬性和任務(wù)都放在根目錄下的build.gradle中聲明,現(xiàn)在是時(shí)候在它們各自的build.gradle中是聲明自己的任務(wù)了。
//sub_project1 中 task taskA << {println "this is ${name} from ${project.name}" }task taskB << {println "this is ${name} from ${project.name}" }taskA.dependsOn taskB taskB.dependsOn ':sub_project2:taskC'//sub_project2 中 task taskC << {println "this is ${name} from ${project.name}" }我們分析一下,taskA依賴taskB,所以taskA執(zhí)行之前,taskB必須先執(zhí)行;而taskB又依賴于sub_project2中的taskC,所以taskB執(zhí)行前,taskC必須先執(zhí)行。
4. 屬性繼承
在一個(gè)根項(xiàng)目中定義的屬性會(huì)自動(dòng)的被其子項(xiàng)目繼承,子項(xiàng)目中也可以用到屬性。
ext.projectInfo=['group':'com.sososeen09','version':'0.1']group = projectInfo.group version = projectInfo.version project(':sub_project1'){group = projectInfo.groupversion = projectInfo.version... }project(':sub_project2'){group = projectInfo.groupversion = projectInfo.version... }總結(jié)
以上是生活随笔為你收集整理的gradle的多项目构建(九)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gradle挂接到构建生命周期(七)
- 下一篇: 自定义Gradle插件(十)