首页 > 解决方案 > 如何在 Kotlin DSL 的子项目中重用依赖版本?

问题描述

我有一个使用 Kotlin DSL 作为构建文件的多模块 Gradle 项目。在根内部有根build.gradle.kts部分dependenciessubprojects它自己的部分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}")

我怎样才能做到这一点?

标签: kotlingradlekotlin-dsl

解决方案


这个问题最现代、类型安全的解决方案是使用版本目录

  1. 将 Gradle 更新到 7.2。
  2. 将此添加到您的settings.gradleor settings.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)像在所有子项目中一样添加依赖项。

推荐阅读