Gradle什么是依賴管理?

2020-07-24 15:49 更新

粗略的講, 依賴管理由兩部分組成. 首先, Gradle 需要了解你的項(xiàng)目需要構(gòu)建或運(yùn)行的東西, 以便找到它們. 我們稱這些傳入的文件為項(xiàng)目的 dependencies(依賴項(xiàng)). 其次, Gradle 需要構(gòu)建并上傳你的項(xiàng)目產(chǎn)生的東西. 我們稱這些傳出的項(xiàng)目文件為 publications(發(fā)布項(xiàng)). 讓我們來看看這兩條的詳細(xì)信息:

大多數(shù)項(xiàng)目都不是完全獨(dú)立的. 它們需要其它項(xiàng)目進(jìn)行編譯或測(cè)試等等. 舉個(gè)例子, 為了在項(xiàng)目中使用 Hibernate, 在編譯的時(shí)候需要在 classpath 中添加一些 Hibernate 的 jar 路徑. 要運(yùn)行測(cè)試的時(shí)候, 需要在test classpath 中包含一些額外的 jar, 比如特定的 JDBC 驅(qū)動(dòng)或者 Ehcache jars.

這些傳入的文件構(gòu)成上述項(xiàng)目的依賴. Gradle 允許你告訴它項(xiàng)目的依賴關(guān)系, 以便找到這些依賴關(guān)系, 并在你的構(gòu)建中維護(hù)它們. 依賴關(guān)系可能需要從遠(yuǎn)程的 Maven 或者 Ivy 倉庫中下載, 也可能是在本地文件系統(tǒng)中, 或者是通過多項(xiàng)目構(gòu)建另一個(gè)構(gòu)建. 我們稱這個(gè)過程為 dependency resolution(依賴解析).

這一特性與 Ant 相比效率提高了許多. 使用 Ant, 你只有指定 jar 的絕對(duì)路徑或相對(duì)路徑才能讀取 jar. 使用 Gradle, 你只需要申明依賴的名稱, 然后它會(huì)通過其它的設(shè)置來決定在哪里獲取這些依賴關(guān)系, 比如從 Maven 庫. 你可以為 Ant 添加 Apache Ivy 庫或得類似的方法, 但是 Gradle 做的更好.

通常, 一個(gè)項(xiàng)目本身會(huì)具有依賴性. 舉個(gè)例子, 運(yùn)行 Hibernate 的核心需要其他幾個(gè)類庫在 classpath 中. 因此, Gradle 在為你的項(xiàng)目運(yùn)行測(cè)試的時(shí)候, 它會(huì)找到這些依賴關(guān)系, 并使其可用. 我們稱之為transitive dependencies(依賴傳遞).

大部分項(xiàng)目的主要目的是要建立一些文件, 在項(xiàng)目之外使用. 比如, 你的項(xiàng)目產(chǎn)生一個(gè) Java 庫,你需要構(gòu)建一個(gè)jar, 可能是一個(gè) jar 和一些文檔, 并將它們發(fā)布在某處.

這些傳出的文件構(gòu)成了項(xiàng)目的發(fā)布. Gradle 當(dāng)然會(huì)為你負(fù)責(zé)這個(gè)重要的工作. 你聲明項(xiàng)目的發(fā)布, Gradle 會(huì)構(gòu)建并發(fā)布在某處. 究竟什么是"發(fā)布"取決于你想做什么. 可能你希望將文件復(fù)制到本地目錄, 或者將它們上傳到一個(gè)遠(yuǎn)程 Maven 或者 Ivy 庫.或者你可以使用這些文件在多項(xiàng)目構(gòu)建中應(yīng)用在其它的項(xiàng)目中. 我們稱這個(gè)過程為 publication(發(fā)布)


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)