本章說明如何將基本的相依性管理概念應用於基於 JVM 的專案。 有關相依性管理的詳細介紹,請參閱 Gradle 中的相依性管理。
剖析典型的建置腳本
讓我們看看一個非常簡單的基於 JVM 專案的建置腳本。 它應用了 Java 函式庫外掛程式,該外掛程式會自動引入標準專案佈局,提供執行典型工作的任務,並為相依性管理提供充分的支援。
plugins {
`java-library`
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.hibernate:hibernate-core:3.6.7.Final")
testImplementation("junit:junit:4.+")
api("com.google.guava:guava:23.0")
}
plugins {
id 'java-library'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.hibernate:hibernate-core:3.6.7.Final'
testImplementation 'junit:junit:4.+'
api 'com.google.guava:guava:23.0'
}
Project.dependencies{} 代码块声明编译项目的生产源代码需要 Hibernate core 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'
}
要了解有關定義相依性的更多資訊,請查看宣告相依性。
使用相依性配置
Configuration 是一個命名的相依性和產出物集合。 配置主要有三個目的
- 宣告相依性
-
外掛程式使用配置,使建置作者可以輕鬆地宣告在執行外掛程式定義的任務期間,各種目的需要哪些其他子專案或外部產出物。 例如,外掛程式可能需要 Spring Web 框架相依性來編譯原始碼。
- 解析相依性
-
外掛程式使用配置來查找(並可能下載)其定義的任務的輸入。 例如,Gradle 需要從 Maven Central 下載 Spring Web 框架 JAR 檔案。
- 公開產出物以供使用
-
外掛程式使用配置來定義它為其他專案生成的產出物以供使用。 例如,專案希望將其編譯後的原始碼打包在 JAR 檔案中,發布到內部 Artifactory 儲存庫。
考慮到這三個目的,讓我們看一下 Java 函式庫外掛程式定義的幾個標準配置。
- 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 = file("../local-repo")
}
}
一個專案可以有多個儲存庫。 Gradle 將按照指定的順序在每個儲存庫中查找相依性,並在第一個包含請求模組的儲存庫處停止。
要了解有關定義儲存庫的更多資訊,請查看宣告儲存庫。