上一節(jié)你給你的項(xiàng)目定義了一個(gè)層次化的目錄結(jié)構(gòu),整個(gè)項(xiàng)目包含一個(gè)根目錄和每個(gè)模塊一個(gè)子目錄,這一節(jié)你將學(xué)習(xí)怎么用Gradle來構(gòu)建這樣一個(gè)項(xiàng)目結(jié)構(gòu)。
首先在你的根目錄新建一個(gè)build.gradle文件,創(chuàng)建一個(gè)空的build腳本然后運(yùn)行g(shù)radle projects:
$ gradle projects
:projects
------------------------------------------------------------
Root project
------------------------------------------------------------
Root project 'todo'
No sub-projects
接下來學(xué)習(xí)怎么通過settings.gradle來定義項(xiàng)目的子項(xiàng)目。
http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag38.png" alt="" />
設(shè)置文件用來表示項(xiàng)目的層次結(jié)構(gòu),默認(rèn)的設(shè)置文件名稱是settings.gradle,對(duì)于你想添加的每一個(gè)子項(xiàng)目,調(diào)用include方法來添加。
//參數(shù)是項(xiàng)目路徑,不是文件路徑
include 'model'
include 'repository', 'web'
提供的項(xiàng)目路徑是相對(duì)于根目錄,記住冒號(hào):是用來分隔目錄層次,比如你想表示model/todo/items這個(gè)目錄,在gradle里面是model:todo:items這樣表示。接下來執(zhí)行g(shù)radle projects任務(wù):
$ gradle projects
:projects
------------------------------------------------------------
Root project
------------------------------------------------------------
Root project 'todo'
+--- Project ':model'
+--- Project ':repository'
+--- Project ':web'
通過添加當(dāng)個(gè)設(shè)置文件,你就創(chuàng)建了一個(gè)多項(xiàng)目的構(gòu)建包含一個(gè)根項(xiàng)目和三個(gè)子項(xiàng)目,不需要額外的配置。
在Gradle開始執(zhí)行構(gòu)建之前,它創(chuàng)建一個(gè)Settings類型的實(shí)例,Settings接口直接用來表示settings文件,主要目的是通過代碼來動(dòng)態(tài)添加項(xiàng)目參與到多項(xiàng)目構(gòu)建中,下圖是你可以訪問的Gradle API。
http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag39.png" alt="" />
之前我們介紹過Gradle有三個(gè)生命周期,實(shí)例化階段->配置階段->執(zhí)行階段,Settings處于實(shí)例化階段,Gradle自動(dòng)找出一個(gè)子項(xiàng)目是否處在一個(gè)多項(xiàng)目構(gòu)建中。
http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag40.png" alt="" />
Gradle允許你從根目錄或者任何子目錄中運(yùn)行構(gòu)建任務(wù),只要它包含一個(gè)build腳本,Gradle怎么知道一個(gè)子項(xiàng)目是不是一個(gè)多項(xiàng)目構(gòu)建的一部分呢?他需要查找settings文件,Gradle通過兩步來查找設(shè)置文件。
如果找到了settings文件,項(xiàng)目包含在另一個(gè)項(xiàng)目中,這個(gè)項(xiàng)目就當(dāng)成是多項(xiàng)目構(gòu)建的一部分。整個(gè)過程如下所示:
http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag41.png" alt="" /> http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag42.png" alt="" />