Gradle父子項目構建

Gradle對構建模塊化項目提供了強大的支持,在Gradle中每一個模塊都是一個項目,稱之爲Gradle多項目構建技術,多項目構建實現了項目模塊化,降低代碼耦合度,增加內聚性,本篇文章將簡單介紹如何使用Gradle進行多項目構建。

 

1、組裝多項目構建

Gradle整個項目是由一個根目錄和多個模塊的子目錄構成,在根目錄下新建build.gradle構建腳本,使用gradle projects命令查看所有參與構建的項目:

> Task :projects 
//只有一個根項目,無子項目
------------------------------------------------------------
Root project
------------------------------------------------------------
Root project 'root'
No sub-projects


示例中使用的多項目層次結構如下圖,定義了3個子項目:

這裏寫圖片描述
①settings文件介紹:使用過Gradle構建項目的都應該知道這個文件,該文件聲明瞭項目層次結構所需的配置。默認情況下,這個文件被命名爲settings.gradle,並且和根項目的build.gradle文件放在一起。簡單配置settings.gradle文件:

//settings.gradle腳本:
include 'model'
include 'repository', 'web'

//再次運行gradle projects命令,可以看出多了3個子項目:
> Task :projects 
------------------------------------------------------------
Root project
------------------------------------------------------------
Root project 'root'
+--- Project ':model'
+--- Project ':repository'
\--- Project ':web'


②settings API的理解:Gradle在組裝構建之前,會創建一個Settings實例,Settings接口是settings文件的直接表示,它的主要作用就是添加Project實例參與多項目構建,下圖顯示了Settings接口的相關方法:

這裏寫圖片描述
我們可以在settings.gradle文件中直接使用這些相關的API進行編碼,例如調用了include(String)方法將子項目添加到多項目的構建中。

③settings執行的階段:在介紹task的使用時說到了構建過程的三個生命週期:初始化、配置和執行。那麼是在哪個階段解析執行settings文件中的代碼的呢?可以想到的是,它肯定是在Project實例配置之前進行實例化的:

這裏寫圖片描述
④如何找到settings文件:只要根項目或者任何子項目的目錄中包含構建文件,Gradle就運行你從相應的位置運行構建。 Gradle是如何知道一個子項目是一個多項目構建的一部分的呢?它需要找到settings文件,這個文件指示了子項目是否包含在多項目構建中。步驟:①首先Gradle在與當前目錄同層次的master目錄下搜索settings文件,②找不到則在父目錄下查找settings文件,下圖分別對應這兩種情況:

這裏寫圖片描述
⑤項目的兩種佈局:分層佈局和平面佈局,android項目中使用的就是分層佈局。對於平面佈局來說,要想包括與根項目同一嵌套層次的項目,需要使用includeFlat方法,下圖分別對應的是分層佈局和平面佈局:

這裏寫圖片描述
 

2、子項目的構建文件

每個子項目的構建需要在子項目的目錄下新建一個build.gradle構建腳本,該目錄樹如下圖:

這裏寫圖片描述
①根項目構建腳本:

/**爲所有項目(包括根項目和所有子項目)設置group和version屬性*/
allprojects {
    group = 'com.manning.gia'
    version = '0.1'
}
/**所有子項目應用Java插件*/
subprojects {
    apply plugin: 'java'
}


②子項目構建腳本:一般在子項目構建腳本中不聲明任何代碼也是可以的,除非有一些其它的需求,例如web子項目的構建腳本如下:

/**應用war插件*/
apply plugin: 'war'
/**聲明中心倉庫*/
repositories {
    mavenCentral()
}
dependencies {
    /**定義依賴了repository子項目*/
    compile project(':repository')
}


3、定義不同的構建腳本名稱

標準的Gradle構建文件名是build.gradle,但是也許有必要使用一些更具有表達性的名稱來命名構建文件。想使用自定義的構建腳本文件名,關鍵在於settings文件。假如項目結構如下圖:

這裏寫圖片描述

include 'todo-model', 'todo-repository', 'todo-web'

/**更改構建文件,將build.gradle 更換成更有意義的命名,如 model.gradle
 * it.name 是子項目名:todo-model todo-repository todo-web*/
rootProject.children.each {
    /**設置構建腳本文件名*/
    it.buildFileName = it.name + '.gradle' - 'todo-'
}


以上簡單介紹多項目構建的原理,settings文件如何實現基本的配置,如何是一個項目作爲子項目添加到構建中等。還是那句話,知其所以然能夠讓你得心應手。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章