本章說明如何將基本的相依性管理概念套用於基於 JVM 的專案。如需相依性管理的詳細介紹,請參閱 Gradle 中的相依性管理。
剖析典型的建置指令碼
我們來看一個非常簡單的基於 JVM 專案的建置指令碼。它套用 Java 函式庫外掛,它會自動引入標準專案配置,提供執行典型工作的任務,並適當地支援相依性管理。
plugins {
`java-library`
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.hibernate:hibernate-core:3.6.7.Final")
api("com.google.guava:guava:23.0")
testImplementation("junit:junit:4.+")
}
plugins {
id 'java-library'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.hibernate:hibernate-core:3.6.7.Final'
api 'com.google.guava:guava:23.0'
testImplementation 'junit:junit:4.+'
}
Project.dependencies{} 程式碼區塊宣告需要 Hibernate 核心 3.6.7.Final 來編譯專案的生產原始碼。它也指出需要 junit >= 4.0 來編譯專案的測試。所有相依性都應該在 Maven Central 存放庫中查詢,如 Project.repositories{} 所定義。以下各節會更詳細地說明每個面向。
宣告模組相依性
您可以宣告各種 相依性類型。其中一種類型是模組相依性。模組相依性表示相依於在目前建置外部建置的特定版本模組。模組通常儲存在存放庫中,例如 Maven Central、公司 Maven 或 Ivy 存放庫,或本機檔案系統中的目錄。
若要定義模組相依性,請將其新增至相依性設定檔
dependencies {
implementation("org.hibernate:hibernate-core:3.6.7.Final")
}
dependencies {
implementation 'org.hibernate:hibernate-core:3.6.7.Final'
}
若要深入瞭解相依性定義,請參閱宣告相依性。
使用相依性設定檔
設定檔是一組已命名的相依性和成品。設定檔有三個主要用途
- 宣告相依性
-
外掛程式使用設定檔,讓建置作者可以輕鬆宣告外掛程式定義的任務執行期間,需要哪些其他子專案或外部成品。例如,外掛程式可能需要 Spring 網路架構相依性才能編譯原始程式碼。
- 解析相依性
-
外掛程式使用設定檔尋找 (並可能下載) 其定義任務的輸入。例如,Gradle 需要從 Maven Central 下載 Spring 網路架構 JAR 檔案。
- 公開成品供使用
-
外掛程式使用設定檔定義其為其他專案使用而產生的成品。例如,專案想要將其編譯的原始程式碼封裝在 JAR 檔案中,並發佈到內部 Artifactory 儲存庫。
了解這三個用途後,我們來看一下Java Library 外掛程式定義的標準設定檔。
- implementation
-
編譯專案的生產原始碼所需的相依性,不屬於專案公開的 API 的一部分。例如,專案使用 Hibernate 作為其內部持續性層實作。
- api
-
編譯專案的生產原始碼所需的相依性,是專案公開的 API 的一部分。例如,專案使用 Guava,並公開具有 Guava 類別的方法簽章的公開介面。
- testImplementation
-
編譯和執行專案測試原始碼所需的相依性。例如,專案決定使用測試架構 JUnit 編寫測試程式碼。
各種外掛會新增更多標準組態。您也可以透過 Project.configurations{} 在您的建置中定義自己的自訂組態。請參閱 相依性組態是什麼,以取得定義和自訂相依性組態的詳細資料。
宣告常見的 Java 儲存庫
Gradle 如何知道在哪裡尋找外部相依性的檔案?Gradle 會在儲存庫中尋找它們。儲存庫是模組的集合,依據 group
、name
和 version
組織。Gradle 了解不同的 儲存庫類型,例如 Maven 和 Ivy,並支援透過 HTTP 或其他協定存取儲存庫的各種方式。
預設情況下,Gradle 沒有定義任何儲存庫。您需要使用 Project.repositories{} 定義至少一個儲存庫,才能使用模組相依性。其中一個選項是使用 Maven Central 儲存庫
repositories {
mavenCentral()
}
repositories {
mavenCentral()
}
您也可以在本地檔案系統上擁有儲存庫。這適用於 Maven 和 Ivy 儲存庫。
repositories {
ivy {
// URL can refer to a local directory
url = uri("../local-repo")
}
}
repositories {
ivy {
// URL can refer to a local directory
url "../local-repo"
}
}
一個專案可以有多個儲存庫。Gradle 會依據指定的順序在每個儲存庫中尋找相依性,並在找到請求模組的第一個儲存庫時停止。
若要深入了解如何定義儲存庫,請參閱 宣告儲存庫。