Gradle 内置支持依赖管理

gradle basic 7

依赖管理是一种用于声明和解析项目所需外部资源(即依赖)的自动化技术。

依赖包括支持构建项目的 JAR 包、插件、库或源代码。它们在构建脚本中声明

Gradle 自动处理这些依赖的下载、缓存和解析,让你无需手动管理。它还处理版本冲突并支持灵活的版本声明。

声明你的依赖

要向项目添加依赖,请在 build.gradle(.kts) 文件的 dependencies {} 块中指定依赖。

以下 build.gradle.kts 文件向项目添加了一个插件和两个依赖

build.gradle.kts
plugins {
    id("java-library")  (1)
}

dependencies {
    implementation("com.google.guava:guava:32.1.2-jre") (2)
    api("org.apache.juneau:juneau-marshall:8.2.0")      (3)
}
build.gradle
plugins {
    id("java-library")  (1)
}

dependencies {
    implementation("com.google.guava:guava:32.1.2-jre") (2)
    api("org.apache.juneau:juneau-marshall:8.2.0")      (3)
}
1 应用 Java Library 插件,它增加了构建 Java 库的支持。
2 添加对 Google Guava 库的依赖,该库用于生产代码。
3 添加对 Apache Juneau Marshall 库的依赖,该库用于库代码。

Gradle 中的依赖按 配置 (configurations) 分组,配置定义了何时以及如何使用该依赖

  • implementation 用于编译和运行生产代码所需的依赖。

  • api 用于应暴露给库的使用者的依赖。

Gradle 支持许多其他配置,例如 testImplementation, runtimeOnly, compileOnly, api 等等。

查看项目依赖

你可以使用 dependencies 任务检查依赖树。例如,要查看 :app 项目的依赖

$ ./gradlew :app:dependencies

Gradle 将输出依赖树,按配置分组

$ ./gradlew :app:dependencies

> Task :app:dependencies

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

...

runtimeClasspath - Runtime classpath of source set 'main'.
+--- org.apache.juneau:juneau-marshall:8.2.0
|    \--- org.apache.httpcomponents:httpcore:4.4.13
\--- com.google.guava:guava:32.1.2-jre
     +--- com.google.guava:guava-parent:32.1.2-jre
     |    +--- com.google.code.findbugs:jsr305:3.0.2 (c)
     |    +--- org.checkerframework:checker-qual:3.33.0 (c)
     |    \--- com.google.errorprone:error_prone_annotations:2.18.0 (c)
     +--- com.google.guava:failureaccess:1.0.1
     +--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
     +--- com.google.code.findbugs:jsr305 -> 3.0.2
     +--- org.checkerframework:checker-qual -> 3.33.0
     \--- com.google.errorprone:error_prone_annotations -> 2.18.0

使用版本目录

版本目录提供了一种集中且一致的方式来管理整个构建中的依赖坐标和版本。你无需在每个 build.gradle(.kts) 文件中直接声明版本,而是在 libs.versions.toml 文件中一次性定义。

这使得以下操作更容易

  • 在子项目之间共享通用依赖声明

  • 避免重复和版本不一致

  • 在大型项目中强制执行依赖和插件版本

版本目录通常包含四个部分

  1. [versions] 声明插件和库将引用的版本号。

  2. [libraries] 定义构建文件中使用的库。

  3. [bundles] 定义一组依赖。

  4. [plugins] 定义插件。

这是一个例子

gradle/libs.versions.toml
[versions]
guava = "32.1.2-jre"
juneau = "8.2.0"

[libraries]
guava = { group = "com.google.guava", name = "guava", version.ref = "guava" }
juneau-marshall = { group = "org.apache.juneau", name = "juneau-marshall", version.ref = "juneau" }

将此文件放在项目的 gradle/ 目录中,文件名为 libs.versions.toml。Gradle 将自动识别它,并在构建脚本中通过 libs 访问器公开其内容。像 IntelliJ 和 Android Studio 这样的 IDE 也会识别此元数据以提供代码补全。

定义后,你可以在构建文件中直接引用这些别名

build.gradle.kts
dependencies {
    implementation(libs.guava)
    api(libs.juneau.marshall)
}
build.gradle
dependencies {
    implementation(libs.guava)
    api(libs.juneau.marshall)
}

要了解更多信息,请参阅依赖管理章节

下一步: 了解任务 >>