如何在 Kotlin DSL 的子项目中重用依赖版本?

How to reuse dependency versions in subprojects for Kotlin DSL?

我有一个多模块 Gradle 项目,使用 Kotlin DSL 作为构建文件。在根 build.gradle.kts 中有 dependencies 部分用于根,subprojects 有自己的 dependencies。我想创建一个变量,它可以保留某些依赖项的版本并用于 build.gradle.kts.

中的所有模块

build.gradle.kts 看起来像:

buildscript {
// ...
}
plugins {
// ...
}
subprojects {
// repositories, plugins, tasks, etc.

dependencies {
   implementation("com.fasterxml.jackson.core:jackson-databind:2.10.4")
}

子模块common-module/build.gradle.kts

dependencies {
    implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.10.4")
}

我想声明一个变量并将这些依赖项的版本分配为一个值,并且只在模块上重用它。像 implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-csv:${jacksonVersion}").

这样的东西

我该怎么做?

此问题最现代、类型安全的解决方案是使用 version catalogs

  1. 将 Gradle 更新到 7.2。
  2. 将此添加到您的 settings.gradlesettings.gradle.kts:
enableFeaturePreview("VERSION_CATALOGS")
  1. gradle/libs.versions.toml:
[versions]
jackson = "2.12.5"

[libraries]
jackson-databind = { module = "com.fasterxml.jackson:jackson-databind", version.ref = "jackson" }
jackson-dataformat-csv = { module = "com.fasterxml.jackson.dataformat:jackson-dataformat-csv", version.ref = "jackson" }
  1. 在所有子项目中添加implementation(libs.jackson.dataformat.csv)等依赖。