本章說明如何將基本的相依性管理概念應用於基於 JVM 的專案。 有關相依性管理的詳細介紹,請參閱 Gradle 中的相依性管理

剖析典型的建置腳本

讓我們看看一個非常簡單的基於 JVM 專案的建置腳本。 它應用了 Java 函式庫外掛程式,該外掛程式會自動引入標準專案佈局,提供執行典型工作的任務,並為相依性管理提供充分的支援。

build.gradle.kts
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")
}
build.gradle
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 儲存庫,或本地檔案系統中的目錄。

要定義模組相依性,您需要將其添加到相依性配置

build.gradle.kts
dependencies {
    implementation("org.hibernate:hibernate-core:3.6.7.Final")
}
build.gradle
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 在儲存庫中查找它們。 儲存庫是模組的集合,按 groupnameversion 組織。 Gradle 理解不同的 儲存庫類型,例如 Maven 和 Ivy,並支援通過 HTTP 或其他協定訪問儲存庫的各種方式。

預設情況下,Gradle 不會定義任何儲存庫。 在可以使用模組相依性之前,您需要借助 Project.repositories{} 定義至少一個。 一種選擇是使用 Maven Central 儲存庫

build.gradle.kts
repositories {
    mavenCentral()
}
build.gradle
repositories {
    mavenCentral()
}

您還可以在本地檔案系統上擁有儲存庫。 這適用於 Maven 和 Ivy 儲存庫。

build.gradle.kts
repositories {
    ivy {
        // URL can refer to a local directory
        url = uri("../local-repo")
    }
}
build.gradle
repositories {
    ivy {
        // URL can refer to a local directory
        url = file("../local-repo")
    }
}

一個專案可以有多個儲存庫。 Gradle 將按照指定的順序在每個儲存庫中查找相依性,並在第一個包含請求模組的儲存庫處停止。

要了解有關定義儲存庫的更多資訊,請查看宣告儲存庫

發布產出物

要了解有關發布產出物的更多資訊,請查看發布外掛程式