9

buildSrc在多模块 Kotlin 项目中使用一个模块来管理依赖项定义和版本。该模块使用kotlin-dsl,如build.gradle.kts所示:

plugins {
    `kotlin-dsl`
}

替代声明:

plugins {
    id("org.gradle.kotlin.kotlin-dsl") version "0.16.2"
}

我想使用相同的 Kotlin 版本来编译buildSrc模块以及在应用程序模块中。我的第一次尝试是简单地添加 JVM 工件:

plugins {
    `kotlin-dsl`
    kotlin("jvm") version "1.2.31"
}

然而,这会导致构建错误,这里讨论:

解析插件时出错 [id: 'org.jetbrains.kotlin.jvm', version: '1.2.31']
已在类路径上的插件的插件请求不得包含版本

什么是只定义一次在整个项目中使用的 Kotlin 版本的便捷方法?

有关的

4

3 回答 3

4

每个 Gradle 版本都旨在与特定版本的插件一起使用, 并且不保证kotlin-dsl任意 Gradle 版本和插件版本之间的兼容性。kotlin-dsl

在构建中使用意外版本的kotlin-dsl插件可能会导致难以诊断问题。

kotlin-dsl从 Gradle 5.4 开始,只要检测到插件的意外版本,就会发出警告。

保罗梅林@eskatos,25.04.2019

因此,我删除version

plugins {
    `kotlin-dsl`
}

repositories {
    mavenCentral()
}
于 2019-04-26T09:43:37.393 回答
3

我知道的唯一方法是将它放入 gradle.properties (或任何其他配置)并在 settings.gradle.kts 中读取它pluginManagement。像这样:

pluginManagement {
    repositories {
        gradlePluginPortal()
    }
    resolutionStrategy {
        eachPlugin {
            if (requested.id.id.startsWith("org.jetbrains.kotlin")) {
                useVersion(gradle.rootProject.extra["kotlin.version"] as String)
            }
        }
    }
}
于 2018-04-09T22:12:23.710 回答
0

plugins错误说明了一切:如果您已经在buildscript块中指定了插件版本,则无法在文件夹中指定插件版本。

您可以将gradle.propertieskotlinVersion和符号链接放入buildSrc/gradle.propeties./gradle.properties

于 2018-04-10T10:28:28.057 回答