第 3 部分:依赖项管理
了解项目依赖项和 Gradle 的依赖项管理的基础知识。
步骤 1. 了解版本目录
版本目录用于在中心位置声明项目的全部直接依赖项。
它由 Gradle init 在 gradle/libs.versions.toml
中创建,并在子项目构建文件中引用。
[versions]
guava = "32.1.2-jre"
junit-jupiter = "5.10.0"
[libraries]
guava = { module = "com.google.guava:guava", version.ref = "guava" }
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter" }
要引用版本目录中定义的库
dependencies {
implementation(libs.guava)
testImplementation(libs.junit.jupiter)
}
dependencies {
implementation libs.guava
testImplementation libs.junit.jupiter
}
在此示例中,libs.guava
和 libs.junit.jupiter
引用版本目录中定义的相应库。
使用 versions.junit.jupiter 语法,因为键包含连字符,它是一个特殊字符。
|
版本目录比直接在构建脚本中声明依赖项具有许多优势
-
Gradle 从目录生成类型安全访问器,以便您可以在 IDE 中使用自动完成轻松添加依赖项。
-
这是一个声明依赖项版本的中心位置,以便任何更改都适用于每个子项目。
步骤 2. 了解项目依赖项
Gradle 为依赖项管理和自动化提供了出色的支持。
让我们再次查看我们的构建脚本(build.gradle(.kts)
文件),特别是以下部分
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
// Use JUnit Jupiter for testing.
testImplementation(libs.junit.jupiter)
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
// This dependency is used by the application.
implementation(libs.guava)
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
// Use JUnit Jupiter for testing.
testImplementation libs.junit.jupiter
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
// This dependency is used by the application.
implementation libs.guava
}
Gradle 依赖项管理中的一些关键概念包括
存储库 - 依赖项的来源 → mavenCentral()
Maven Central 是由 Maven 社区提供并由 Sonatype 支持的 jar 文件、插件和库的集合。它是 Java 的事实上的公共构件存储,并被许多构建系统使用。
依赖项 - 通过配置类型声明的依赖项 → libs.junit.jupiter
和 libs.guava
Gradle 需要特定信息才能找到依赖项。让我们看看 libs.guava
→ com.google.guava:guava:32.1.2-jre
和 libs.junit.jupiter
→ org.junit.jupiter:junit-jupiter-api:5.9.1
;它们被分解如下
说明 | com.google.guava:guava:32.1.2-jre | org.junit.jupiter:junit-jupiter-api:5.9.1 | |
---|---|---|---|
组 |
组织的标识符 |
|
|
名称 |
依赖项标识符 |
|
|
版本 |
要导入的版本号 |
|
|
步骤 3. 了解传递依赖项
传递依赖项是依赖项的依赖项。
为了使我们的 guava
依赖项正常工作,它需要一个名为 failureaccess
的库。因此,failureaccess
是该项目的传递依赖项。
步骤 4. 查看项目依赖项
你可以使用 ./gradlew :app:dependencies
命令在终端中查看你的依赖项树
$ ./gradlew :app:dependencies
> Task :app:dependencies
------------------------------------------------------------
Project ':app'
------------------------------------------------------------
...
compileClasspath - Compile classpath for source set 'main'.
\--- 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.j2objc:j2objc-annotations:2.8 (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
\--- com.google.j2objc:j2objc-annotations -> 2.8
输出清楚地表明 com.google.guava:guava:32.1.2-jre
依赖于 com.google.guava:failureaccess:1.0.1
。
步骤 5. 在构建扫描中查看依赖项
要使用 构建扫描 查看依赖项,请使用可选的 --scan
标志运行构建任务。
在 tutorial
目录中,输入以下命令并按照提示接受条款
$ ./gradlew build --scan
BUILD SUCCESSFUL in 423ms
7 actionable tasks: 7 up-to-date
Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service. Do you accept these terms? [yes, no] yes
Gradle Terms of Service accepted.
Publishing build scan...
https://gradle.com/s/link
构建扫描 是构建的可共享和集中记录,并作为 Gradle 的免费服务提供。
点击提示中提供的链接:https://gradle.com/s/link
。
您必须接受服务条款才能使用构建扫描。 |
您需要使用您的电子邮件激活构建扫描
您将在收件箱中收到指向扫描的最终链接,如下所示
在菜单中打开依赖项选项卡,然后展开compileClasspath
、runtimeClasspath
、testCompileClasspath
和testRuntimeClasspath
正如预期的那样,我们可以看到声明的依赖项junit
和guava
被 Gradle 用于编译、运行和测试应用程序。
在窗口中展开com.google.guava:guava:32.1.2-jre
和org.junit.jupiter:junit-jupiter:5.9.1
在junit
和guava
下有几个传递依赖项。例如,传递依赖项com.google.code.findbugs:jsr305:3.0.2
来自依赖项com.google.guava:guava:32.1.2-jre
。
步骤 6. 更新项目依赖项
在构建文件中添加和更改依赖项。
让我们更改guava
版本,看看这如何影响依赖项树。
将版本目录中的guava
依赖项更改为
[versions]
guava = "30.0-jre"
junit-jupiter = "5.10.0"
[libraries]
guava = { module = "com.google.guava:guava", version.ref = "guava" }
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter" }
如果您使用 IntelliJ 更改文件,请不要忘记单击 Gradle 的同步
按钮
运行./gradlew build --scan
并查看构建扫描结果
在终端中运行./gradlew :app:dependencies
以检查依赖项树中的更改
...
compileClasspath - Compile classpath for source set 'main'.
\--- com.google.guava:guava:30.0-jre
+--- 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.5.0
+--- com.google.errorprone:error_prone_annotations:2.3.4
\--- com.google.j2objc:j2objc-annotations:1.3
...
很明显,guava
依赖项已更新到版本30.0
,传递依赖项也已更改。
步骤 7. 运行 Java 应用程序
最后,确保一切正常,可以使用run
任务,无论是在终端还是 IDE 中
./gradlew run > Task :app:compileJava UP-TO-DATE > Task :app:processResources NO-SOURCE > Task :app:classes UP-TO-DATE > Task :app:run Hello World!
下一步: 应用插件 >>