日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Gradle父子项目构建

發(fā)布時(shí)間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gradle父子项目构建 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Gradle對(duì)構(gòu)建模塊化項(xiàng)目提供了強(qiáng)大的支持,在Gradle中每一個(gè)模塊都是一個(gè)項(xiàng)目,稱之為Gradle多項(xiàng)目構(gòu)建技術(shù),多項(xiàng)目構(gòu)建實(shí)現(xiàn)了項(xiàng)目模塊化,降低代碼耦合度,增加內(nèi)聚性,本篇文章將簡(jiǎn)單介紹如何使用Gradle進(jìn)行多項(xiàng)目構(gòu)建。

?

1、組裝多項(xiàng)目構(gòu)建

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

> Task :projects //只有一個(gè)根項(xiàng)目,無子項(xiàng)目 ------------------------------------------------------------ Root project ------------------------------------------------------------ Root project 'root' No sub-projects


示例中使用的多項(xiàng)目層次結(jié)構(gòu)如下圖,定義了3個(gè)子項(xiàng)目:


①settings文件介紹:使用過Gradle構(gòu)建項(xiàng)目的都應(yīng)該知道這個(gè)文件,該文件聲明了項(xiàng)目層次結(jié)構(gòu)所需的配置。默認(rèn)情況下,這個(gè)文件被命名為settings.gradle,并且和根項(xiàng)目的build.gradle文件放在一起。簡(jiǎn)單配置settings.gradle文件:

//settings.gradle腳本: include 'model' include 'repository', 'web'//再次運(yùn)行g(shù)radle projects命令,可以看出多了3個(gè)子項(xiàng)目: > Task :projects ------------------------------------------------------------ Root project ------------------------------------------------------------ Root project 'root' +--- Project ':model' +--- Project ':repository' \--- Project ':web'


②settings API的理解:Gradle在組裝構(gòu)建之前,會(huì)創(chuàng)建一個(gè)Settings實(shí)例,Settings接口是settings文件的直接表示,它的主要作用就是添加Project實(shí)例參與多項(xiàng)目構(gòu)建,下圖顯示了Settings接口的相關(guān)方法:


我們可以在settings.gradle文件中直接使用這些相關(guān)的API進(jìn)行編碼,例如調(diào)用了include(String)方法將子項(xiàng)目添加到多項(xiàng)目的構(gòu)建中。

③settings執(zhí)行的階段:在介紹task的使用時(shí)說到了構(gòu)建過程的三個(gè)生命周期:初始化、配置和執(zhí)行。那么是在哪個(gè)階段解析執(zhí)行settings文件中的代碼的呢?可以想到的是,它肯定是在Project實(shí)例配置之前進(jìn)行實(shí)例化的:


④如何找到settings文件:只要根項(xiàng)目或者任何子項(xiàng)目的目錄中包含構(gòu)建文件,Gradle就運(yùn)行你從相應(yīng)的位置運(yùn)行構(gòu)建。 Gradle是如何知道一個(gè)子項(xiàng)目是一個(gè)多項(xiàng)目構(gòu)建的一部分的呢?它需要找到settings文件,這個(gè)文件指示了子項(xiàng)目是否包含在多項(xiàng)目構(gòu)建中。步驟:①首先Gradle在與當(dāng)前目錄同層次的master目錄下搜索settings文件,②找不到則在父目錄下查找settings文件,下圖分別對(duì)應(yīng)這兩種情況:


⑤項(xiàng)目的兩種布局:分層布局和平面布局,android項(xiàng)目中使用的就是分層布局。對(duì)于平面布局來說,要想包括與根項(xiàng)目同一嵌套層次的項(xiàng)目,需要使用includeFlat方法,下圖分別對(duì)應(yīng)的是分層布局和平面布局:


?

2、子項(xiàng)目的構(gòu)建文件

每個(gè)子項(xiàng)目的構(gòu)建需要在子項(xiàng)目的目錄下新建一個(gè)build.gradle構(gòu)建腳本,該目錄樹如下圖:


①根項(xiàng)目構(gòu)建腳本:

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


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

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


3、定義不同的構(gòu)建腳本名稱

標(biāo)準(zhǔn)的Gradle構(gòu)建文件名是build.gradle,但是也許有必要使用一些更具有表達(dá)性的名稱來命名構(gòu)建文件。想使用自定義的構(gòu)建腳本文件名,關(guān)鍵在于settings文件。假如項(xiàng)目結(jié)構(gòu)如下圖:

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


以上簡(jiǎn)單介紹多項(xiàng)目構(gòu)建的原理,settings文件如何實(shí)現(xiàn)基本的配置,如何是一個(gè)項(xiàng)目作為子項(xiàng)目添加到構(gòu)建中等。還是那句話,知其所以然能夠讓你得心應(yīng)手。
?

總結(jié)

以上是生活随笔為你收集整理的Gradle父子项目构建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。