粗略的講, 依賴管理由兩部分組成. 首先, Gradle 需要了解你的項目需要構(gòu)建或運(yùn)行的東西, 以便找到它們. 我們稱這些傳入的文件為項目的 dependencies(依賴項). 其次, Gradle 需要構(gòu)建并上傳你的項目產(chǎn)生的東西. 我們稱這些傳出的項目文件為 publications(發(fā)布項). 讓我們來看看這兩條的詳細(xì)信息:
大多數(shù)項目都不是完全獨(dú)立的. 它們需要其它項目進(jìn)行編譯或測試等等. 舉個例子, 為了在項目中使用 Hibernate, 在編譯的時候需要在 classpath 中添加一些 Hibernate 的 jar 路徑. 要運(yùn)行測試的時候, 需要在 test classpath 中包含一些額外的 jar, 比如特定的 JDBC 驅(qū)動或者 Ehcache jars.
這些傳入的文件構(gòu)成上述項目的依賴. Gradle 允許你告訴它項目的依賴關(guān)系, 以便找到這些依賴關(guān)系, 并在你的構(gòu)建中維護(hù)它們. 依賴關(guān)系可能需要從遠(yuǎn)程的 Maven 或者 Ivy 倉庫中下載, 也可能是在本地文件系統(tǒng)中, 或者是通過多項目構(gòu)建另一個構(gòu)建. 我們稱這個過程為 dependency resolution(依賴解析).
這一特性與 Ant 相比效率了許多. 使用 Ant, 你只有指定 jar 的絕對路徑或相對路徑才能讀取 jar. 使用 Gradle, 你只需要申明依賴的名稱, 然后它會通過其它的設(shè)置來決定在哪里獲取這些依賴關(guān)系, 比如從 Maven 庫. 你可以為 Ant 添加 Apache Ivy 庫或得類似的方法, 但是 Gradle 做的更好.
通常, 一個項目本身會具有依賴性. 舉個例子, 運(yùn)行 Hibernate 的核心需要其他幾個類庫在 classpath 中. 因此, Gradle 在為你的項目運(yùn)行測試的時候, 它會找到這些依賴關(guān)系, 并使其可用. 我們稱之為transitive dependencies(依賴傳遞).
大部分項目的主要目的是要建立一些文件, 在項目之外使用. 比如, 你的項目產(chǎn)生一個 Java 庫,你需要構(gòu)建一個jar, 可能是一個 jar 和一些文檔, 并將它們發(fā)布在某處.
這些傳出的文件構(gòu)成了項目的發(fā)布. Gradle 當(dāng)然會為你負(fù)責(zé)這個重要的工作. 你聲明項目的發(fā)布, Gradle 會構(gòu)建并發(fā)布在某處. 究竟什么是"發(fā)布"取決于你想做什么. 可能你希望將文件復(fù)制到本地目錄, 或者將它們上傳到一個遠(yuǎn)程 Maven 或者 Ivy 庫.或者你可以使用這些文件在多項目構(gòu)建中應(yīng)用在其它的項目中. 我們稱這個過程為 publication(發(fā)布)