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

剖析典型的建置指令碼

我們來看一個非常簡單的基於 JVM 專案的建置指令碼。它套用 Java 函式庫外掛,它會自動引入標準專案配置,提供執行典型工作的任務,並適當地支援相依性管理。

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

若要定義模組相依性,請將其新增至相依性設定檔

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'
}

若要深入瞭解相依性定義,請參閱宣告相依性

使用相依性設定檔

設定檔是一組已命名的相依性和成品。設定檔有三個主要用途

宣告相依性

外掛程式使用設定檔,讓建置作者可以輕鬆宣告外掛程式定義的任務執行期間,需要哪些其他子專案或外部成品。例如,外掛程式可能需要 Spring 網路架構相依性才能編譯原始程式碼。

解析相依性

外掛程式使用設定檔尋找 (並可能下載) 其定義任務的輸入。例如,Gradle 需要從 Maven Central 下載 Spring 網路架構 JAR 檔案。

公開成品供使用

外掛程式使用設定檔定義其為其他專案使用而產生的成品。例如,專案想要將其編譯的原始程式碼封裝在 JAR 檔案中,並發佈到內部 Artifactory 儲存庫。

了解這三個用途後,我們來看一下Java Library 外掛程式定義的標準設定檔

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 "../local-repo"
    }
}

一個專案可以有多個儲存庫。Gradle 會依據指定的順序在每個儲存庫中尋找相依性,並在找到請求模組的第一個儲存庫時停止。

若要深入了解如何定義儲存庫,請參閱 宣告儲存庫

發布成品

若要深入了解如何發布成品,請參閱 發布外掛