如何为buildSrc和应用程序模块定义Kotlin版本?

问题描述 投票:5回答:3

我在buildSrc的多模块Kotlin项目中使用了manage dependency definitions and versions模块。该模块使用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"
}

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

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

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

Related

gradle kotlin build.gradle multi-module gradle-kotlin-dsl
3个回答
2
投票

我知道的唯一方法是将它放入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)
            }
        }
    }
}

0
投票

错误不言而喻:如果您已在plugins块中指定了插件,则无法在buildscript文件夹中指定插件的版本。

你可以把kotlinVersion放到gradle.properties和symlink buildSrc/gradle.propeties./gradle.properties


0
投票

每个Gradle版本都适用于特定版本的kotlin-dsl插件,并且不保证任意Gradle版本和kotlin-dsl插件版本之间的兼容性。

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

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

Paul Merlin @eskatos, 25.04.2019

因此,我删除了version

plugins {
    `kotlin-dsl`
}

repositories {
    mavenCentral()
}
© www.soinside.com 2019 - 2024. All rights reserved.