在典型的 Gradle 项目中,存在多个配置,例如 compileClasspath
和 runtimeClasspath
。
build.gradle.kts
dependencies {
implementation("org.codehaus.groovy:groovy:3.0.1")
runtimeOnly("io.vertx:vertx-lang-groovy:3.9.4")
}
build.gradle
dependencies {
implementation 'org.codehaus.groovy:groovy:3.0.1'
runtimeOnly 'io.vertx:vertx-lang-groovy:3.9.4'
}
这些配置是独立解析的,这可能导致同一依赖项在不同配置中出现不同版本的情况。
例如,一个在编译期间使用的库 (compileClasspath
) 可能解析到版本 1.0,而在运行时 (runtimeClasspath
),由于额外的传递性依赖项,它可能解析到版本 1.1。这种差异可能导致意外行为或运行时错误。
为了解决这个问题,Gradle 允许您强制在配置之间保持依赖项解析的一致性。通过声明某些配置应与另一些配置保持依赖项解析的一致性,您可以确保共享的依赖项在两个配置中具有相同的版本。
依赖解析一致性是一个孵化中的功能。 |
实现一致解析
例如,为了确保 runtimeClasspath
与 compileClasspath
一致,您可以如下配置您的 build.gradle(.kts)
build.gradle.kts
configurations {
runtimeClasspath.get().shouldResolveConsistentlyWith(compileClasspath.get())
}
build.gradle
configurations {
runtimeClasspath.shouldResolveConsistentlyWith(compileClasspath)
}
此设置指示 Gradle 对齐 runtimeClasspath
中的依赖项版本与 compileClasspath
中解析的版本。如果出现无法协调的版本冲突,Gradle 将使构建失败,提示您解决不一致问题。
Java 生态系统中的自动配置
对于 Java 项目,Gradle 提供了一种便捷的方法来在所有源集之间强制执行此一致性
build.gradle.kts
java {
consistentResolution {
useCompileClasspathVersions()
}
}
build.gradle
java {
consistentResolution {
useCompileClasspathVersions()
}
}
此配置确保所有运行时类路径与其对应的编译类路径保持一致,从而促进可靠和可预测的构建。
通过实现依赖解析一致性,您可以防止细微的错误,并在项目的不同类路径中保持依赖项版本的一致性。