在現(xiàn)實(shí)生活中,要創(chuàng)造一個沒有任何外部依賴的應(yīng)用程序并非不可能,但也是極具挑戰(zhàn)的。這也是為什么依賴管理對于每個軟件項(xiàng)目都是至關(guān)重要的一部分。
這篇教程主要講述如何使用Gradle管理我們項(xiàng)目的依賴,我們會學(xué)習(xí)配置應(yīng)用倉庫以及所需的依賴,我們也會理論聯(lián)系實(shí)際,實(shí)現(xiàn)一個簡單的演示程序。
讓我們開始吧。
倉庫管理簡介
本質(zhì)上說,倉庫是一種存放依賴的容器,每一個項(xiàng)目都具備一個或多個倉庫。
Gradle支持以下倉庫格式:
Ivy倉庫
Maven倉庫
Flat directory倉庫
我們來看一下,對于每一種倉庫類型,我們在構(gòu)建中應(yīng)該如何配置。
在構(gòu)建中加入Ivy倉庫
我們可以通過URL地址或本地文件系統(tǒng)地址,將Ivy倉庫加入到我們的構(gòu)建中。
如果想通過URL地址添加一個Ivy倉庫,我們可以將以下代碼片段加入到build.gradle文件中:
repositories {
ivy {
url "http://ivy.petrikainulainen.net/repo"
}
}
如果想通過本地文件系統(tǒng)地址添加一個Ivy倉庫,我們可以將以下代碼片段加入到build.gradle文件中:
repositories {
ivy {
url "../ivy-repo"
}
}
我們繼續(xù),下面是如何在構(gòu)建中加入Maven倉庫。
在構(gòu)建中加入Maven倉庫
與Ivy倉庫很類似,我們可以通過URL地址或本地文件系統(tǒng)地址,將Maven倉庫加入到我們的構(gòu)建中。
如果想通過URL地址添加一個Maven倉庫,我們可以將以下代碼片段加入到build.gradle文件中:
repositories {
maven {
url "http://maven.petrikainulainen.net/repo"
}
}
如果想通過本地文件系統(tǒng)地址添加一個Maven倉庫,我們可以將以下代碼片段加入到build.gradle文件中:
repositories {
maven {
url "../maven-repo"
}
}
在加入Maven倉庫時,Gradle提供了三種“別名”供我們使用,它們分別是:
mavenCentral()別名,表示依賴是從Central Maven 2 倉庫中獲取的。
jcenter()別名,表示依賴是從Bintary’s JCenter Maven 倉庫中獲取的。
mavenLocal()別名,表示依賴是從本地的Maven倉庫中獲取的。
如果我們想要將Central Maven 2 倉庫加入到構(gòu)建中,我們必須在build.gradle文件中加入以下代碼片段:
repositories {
mavenCentral()
}
我們繼續(xù),下面是如何在構(gòu)建中加入Flat Directory倉庫。
在構(gòu)建中加入Flat Directory倉庫
如果我們想要使用Flat Directory倉庫,我們需要將以下代碼片段加入到build.gradle文件中:
repositories {
flatDir {
dirs 'lib'
}
}
這意味著系統(tǒng)將在lib目錄下搜索依賴,同樣的,如果你愿意的話可以加入多個目錄,代碼片段如下:
repositories {
flatDir {
dirs 'libA', 'libB'
}
}
我們繼續(xù),下面要講的是,如何使用Gradle管理項(xiàng)目中的依賴。
依賴管理簡介
在配置完項(xiàng)目倉庫后,我們可以聲明其中的依賴,如果我們想要聲明一個新的依賴,可以采用如下步驟:
指定依賴的配置。
聲明所需的依賴。
讓我們看一下詳細(xì)步驟:
配置中的依賴分類
在Gradle中,依賴是按照指定名稱進(jìn)行分類的,這些分類被稱為配置項(xiàng),我們可以使用配置項(xiàng)聲明項(xiàng)目的外部依賴。
Java插件指定了若干依賴配置項(xiàng),其描述如下:
當(dāng)項(xiàng)目的源代碼被編譯時,compile配置項(xiàng)中的依賴是必須的。
runtime配置項(xiàng)中包含的依賴在運(yùn)行時是必須的。
testCompile配置項(xiàng)中包含的依賴在編譯項(xiàng)目的測試代碼時是必須的。
testRuntime配置項(xiàng)中包含的依賴在運(yùn)行測試代碼時是必須的。
archives配置項(xiàng)中包含項(xiàng)目生成的文件(如Jar文件)。
default配置項(xiàng)中包含運(yùn)行時必須的依賴。
我們繼續(xù),下面是如何在項(xiàng)目中聲明依賴。
聲明項(xiàng)目依賴
最普遍的依賴稱為外部依賴,這些依賴存放在外部倉庫中。一個外部依賴可以由以下屬性指定:
group屬性指定依賴的分組(在Maven中,就是groupId)。
name屬性指定依賴的名稱(在Maven中,就是artifactId)。
vertion屬性指定外部依賴的版本(在Maven中,就是version)。
小貼士:這些屬性在Maven倉庫中是必須的,如果你使用其他倉庫,一些屬性可能是可選的。打個比方,如果你使用Flat directory倉庫,你可能只需要指定名稱和版本。
我們假設(shè)我們需要指定以下依賴:
依賴的分組是foo。
依賴的名稱是foo。
依賴的版本是0.1。
在項(xiàng)目編譯時需要這些依賴。
我們可以將以下代碼片段加入到build.gradle中,進(jìn)行依賴聲明:
dependencies {
compile group: 'foo', name: 'foo', version: '0.1'
}
我們也可以采用一種快捷方式聲明依賴:[group]:[name]:[version]。如果我們想用這種方式,我們可以將以下代碼段加入到build.gradle中:
dependencies {
compile 'foo:foo:0.1'
}
我們也可以在同一個配置項(xiàng)中加入多個依賴,傳統(tǒng)的方式如下:
dependencies {
compile (
[group: 'foo', name: 'foo', version: '0.1'],
[group: 'bar', name: 'bar', version: '0.1']
)
}
如果采用快捷方式,那可以是這樣:
dependencies {
compile 'foo:foo:0.1', 'bar:bar:0.1'
}
自然地,聲明屬于不同配置項(xiàng)的依賴也是可以的。比如說,如果我們想要聲明屬于compile和testCompile配置項(xiàng)的依賴,可以這么做:
dependencies {
compile group: 'foo', name: 'foo', version: '0.1'
testCompile group: 'test', name: 'test', version: '0.1'
}
同樣的,給力的快捷方式又來了( ̄︶ ̄)
dependencies {
compile 'foo:foo:0.1'
testCompile 'test:test:0.1'
}