我在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版本定义的便捷方法是什么?
我知道的唯一方法是将它放入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)
}
}
}
}
错误不言而喻:如果您已在plugins
块中指定了插件,则无法在buildscript
文件夹中指定插件的版本。
你可以把kotlinVersion
放到gradle.properties和symlink buildSrc/gradle.propeties
到./gradle.properties
每个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()
}