為 Gradle 專案宣告的每個相依性都適用於特定範圍。

例如,某些相依性應在編譯原始碼時使用,而其他相依性僅需要在執行時期可用

build.gradle.kts
dependencies {
    implementation("com.google.guava:guava:30.0-jre")   // Needed to compile and run the app
    runtimeOnly("org.slf4j:slf4j-simple:2.0.13")        // Only needed at runtime
}
build.gradle
dependencies {
    implementation("com.google.guava:guava:30.0-jre")   // Needed to compile and run the app
    runtimeOnly("org.slf4j:slf4j-simple:2.0.13")        // Only needed at runtime
}

相依性配置是一種在專案中為不同目的定義不同相依性集合的方式。它們決定了相依性在建置過程的各個階段中如何以及何時使用。

配置是 Gradle 中相依性解析的基本組成部分。

了解相依性配置

Gradle 借助 Configuration 來表示相依性的範圍。每個配置都可以透過唯一的名稱來識別。

許多 Gradle 外掛程式會將預先定義的配置新增至您的專案。

Java Library 外掛程式用於定義產生 Java 函式庫的專案。此外掛程式新增了許多相依性配置。這些配置代表原始碼編譯、執行測試等所需的各種類別路徑

配置名稱 描述 用於

api

編譯和執行時期都需要的相依性,並包含在發佈的 API 中。

宣告相依性

implementation

編譯和執行時期都需要的相依性。

宣告相依性

compileOnly

僅編譯時需要的相依性,不包含在執行時期或發佈中。

宣告相依性

compileOnlyApi

僅編譯時需要的相依性,但包含在發佈的 API 中。

宣告相依性

runtimeOnly

僅在執行時期需要的相依性,不包含在編譯類別路徑中。

宣告相依性

testImplementation

編譯和執行測試所需的相依性。

宣告相依性

testCompileOnly

僅測試編譯時需要的相依性。

宣告相依性

testRuntimeOnly

僅執行測試時需要的相依性。

宣告相依性

相依性宣告配置

相依性宣告配置 (compileOnlyimplementationruntimeOnly) 側重於根據相依性的用途(編譯時間、執行時期、API 暴露)來宣告和管理相依性

dependencies {
    implementation("com.google.guava:guava:30.1.1-jre")     // Implementation dependency
    compileOnly("org.projectlombok:lombok:1.18.20")         // Compile-only dependency
    runtimeOnly("mysql:mysql-connector-java:8.0.23")        // Runtime-only dependency
}
dependencies {
    implementation("com.google.guava:guava:30.1.1-jre")     // Implementation dependency
    compileOnly("org.projectlombok:lombok:1.18.20")         // Compile-only dependency
    runtimeOnly("mysql:mysql-connector-java:8.0.23")        // Runtime-only dependency
}

其他配置

還有其他類型的配置(例如 runtimeClasspathcompileClasspathapiElementsruntimeElements),但它們不用於宣告相依性。

也可以建立自訂配置。自訂配置可讓您定義一組獨特的相依性,可用於特定目的,例如工具鏈或程式碼產生,與標準配置(例如 implementationtestImplementation)分開

build.gradle.kts
val customConfig by configurations.creating

dependencies {
    customConfig("org.example:example-lib:1.0")
}
build.gradle
configurations {
    customConfig
}

dependencies {
    customConfig("org.example:example-lib:1.0")
}

建立自訂配置有助於管理和隔離相依性,確保它們僅包含在相關的類別路徑和建置過程中。

檢視配置

dependencies 任務提供專案相依性的概觀。若要專注於有關單個相依性配置的資訊,請提供選用參數 --configuration

以下範例顯示 Java 專案 implementation 相依性配置中的相依性

$ ./gradlew -q app:dependencies --configuration implementation

------------------------------------------------------------
Project ':app'
------------------------------------------------------------

implementation - Implementation only dependencies for source set 'main'.
\--- com.google.guava:guava:30.0-jre

下一步: 了解宣告儲存庫 >>