为 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

仅运行测试时需要的依赖项。

声明依赖

依赖声明配置

依赖声明配置 (compileOnly, implementation, runtimeOnly) 侧重于根据依赖项的用途(编译时、运行时、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

下一步: 了解关于声明仓库 >>