本章介紹一些 Gradle 依賴管理的基礎(chǔ)
大致上,依賴管理是由2塊組成。首先,Gradle 需要知道項(xiàng)目構(gòu)建或者運(yùn)行的需要是東西。我們把引進(jìn)的文件稱(chēng)之為 項(xiàng)目的依賴。其次,Gradle 需要構(gòu)建和上傳項(xiàng)目的產(chǎn)物。我們把向外輸出的文件稱(chēng)之為項(xiàng)目的發(fā)布?,F(xiàn)在看下細(xì)節(jié):
很多項(xiàng)目不能完全自我包含。他們需要其他項(xiàng)目的產(chǎn)物。比如, 使用 Hibernate ,JDBC driver 或者 Ehcache jars,需要將他們放在我們項(xiàng)目的 classpath, 來(lái)實(shí)現(xiàn)需要的功能。
這些引進(jìn)的項(xiàng)目依賴的文件, Gradle 允許你告訴你的項(xiàng)目所需要的依賴,這樣項(xiàng)目才能找到他們,在構(gòu)建的時(shí)候使用他們。這些依賴可能要從遠(yuǎn)程的 Maven 或者 Ivy 下載,放在你的本地的目錄,或者需要被其他項(xiàng)目構(gòu)建(在相同的 多 project 構(gòu)建中)。我們稱(chēng)之為 dependency resolution (依賴性解析)。
請(qǐng)注意,此功能提供了 Ant 的一個(gè)主要優(yōu)勢(shì)。與 Ant 相比,你只需要指定需要加載的絕對(duì)或相對(duì)路徑的特定的 jars。在 Gradle,你只是聲明依賴的的“名字”, 和其他布局的確定的位置。你可以通過(guò)增加 Apache Ivy到 Ant 得到類(lèi)似的行為,但 Gradle 做得更好。
通常,一個(gè)項(xiàng)目的依賴會(huì)包含自己的依賴。例如,Hibernate 的核心需要幾個(gè)其他包在類(lèi)路徑中存在才能運(yùn)行。所以,當(dāng) Gradle 運(yùn)行你的項(xiàng)目的測(cè)試,它也需要找到這些依賴關(guān)系,使他們存在。我們稱(chēng)這些 transitive dependencies (過(guò)渡依賴)。
大多數(shù)項(xiàng)目的主要目的是構(gòu)建一些文件是在項(xiàng)目中使用。例如,如果你的項(xiàng)目生成 Java 庫(kù),你需要建立一個(gè) jar,也許一個(gè)源 jar 和一些文檔,并將其發(fā)布的某個(gè)地方。
這些輸出文件以發(fā)布包的形式。Gradle 還負(fù)責(zé)這個(gè)重要的工作給你。你聲明你的項(xiàng)目的發(fā)布,Gradle 照顧構(gòu)建和發(fā)布他們。究竟發(fā)布什么取決于你想做什么。你可能想將文件復(fù)制到本地目錄,或?qū)⑺鼈兩蟼鞯揭粋€(gè)遠(yuǎn)程 Maven 或 Ivy 庫(kù)。或者你可能使用在相同的多 project 的另一個(gè)項(xiàng)目文件的構(gòu)建。我們稱(chēng)這個(gè)過(guò)程為 publication(發(fā)布) 。
下面是基本的腳本
Example 8.1. Declaring dependencies
build.gradle
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
這個(gè)腳本說(shuō)明了幾個(gè)事。首先項(xiàng)目需要 Hibernate core 3.6.7.Final 版本來(lái)編譯。其中隱含的意思是,Hibernate core 和 他的依賴在運(yùn)行時(shí)是需要的。其次,需要 junit >= 4.0 版本在測(cè)試時(shí)需要編譯。同時(shí) 告訴 Gradle 依賴在 Maven central 庫(kù) 中找。下面詳述
一個(gè)配置是一個(gè)簡(jiǎn)單的命名依賴的集合。我們稱(chēng)它為依賴配置。你可以用它們來(lái)聲明項(xiàng)目的外部依賴。正如我們將看到的,他們還用聲明項(xiàng)目的 發(fā)布。
Java 配置定義了一些標(biāo)準(zhǔn)的配置,這些配置在Java 插件使用的 classpath 中,下面是一些列表。詳見(jiàn)Chapter 23. The Java Plugin 關(guān)于 Java 插件?中 Table 23.5, “Java plugin - dependency configurations“
compile
編譯項(xiàng)目的生產(chǎn)源所需的依賴。
runtime
生產(chǎn)類(lèi)在運(yùn)行時(shí)所需的依賴。默認(rèn)情況下,還包括編譯時(shí)的依賴。
testCompile
編譯項(xiàng)目的測(cè)試源所需的依賴。默認(rèn)情況下,還包括產(chǎn)品編譯類(lèi)和編譯時(shí)的依賴。
testRuntime
運(yùn)行測(cè)試所需的依賴。默認(rèn)情況下,還包括 編譯,運(yùn)行時(shí)和測(cè)試編譯的依賴。
各種插件添加進(jìn)一步的標(biāo)準(zhǔn)配置。您也可以定義自己的自定義配置,使用你的建構(gòu)建。請(qǐng)參見(jiàn)Chapter 51. Dependency Manageme?Section 51.3, “Dependency configurations” 關(guān)于更多自定義依賴配置。
更多建議: