在 kotlin gradle dsl 中外部化插件版本?

Externalize plugin versions in kotlin gradle dsl?

我想外部化插件版本。

我试过了

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

object DependencyVersions {
    const val SPRING_BOOT_VERSION = "2.1.6.RELEASE"
    const val DEPENDENCY_MANAGEMENT_VERSION = "1.0.8.RELEASE"
}

plugins {
    id("org.springframework.boot") version DependencyVersions.SPRING_BOOT_VERSION
    id("io.spring.dependency-management") version DependencyVersions.DEPENDENCY_MANAGEMENT_VERSION
}

但我得到 Unresolved reference: DependencyVersions

直到最近,Gradle API 仍然如此,但最近已修复。请参阅 this issue covering version variables in the Plugin section. There is an open issue 以修复 Kotlin DSL 的此问题。

解决此问题的唯一方法是使用 PluginResolutionStrategy 设置版本,如 settings.gradle:

中同一问题中所建议的那样
pluginManagement {
resolutionStrategy {
    eachPlugin {
        if (requested.version == null) {
            def pluginName = requested.id.name.split('-').collect { it.capitalize() }.join().uncapitalize()
            def versionPropertyName = (requested.id.id == 'org.jetbrains.kotlin.jvm') ?
                    "kotlinPluginVersion" : "${pluginName}PluginVersion"
            logger.info("Checking for plugin version property '$versionPropertyName'.")
            if (gradle.rootProject.hasProperty(versionPropertyName)) {
                def version = gradle.rootProject.properties[versionPropertyName]
                logger.info("Setting '${requested.id.id}' plugin version to $version.")
                useVersion version
            } else {
                logger.warn("No version specified for plugin '${requested.id.id}' and property " +
                        "'$versionPropertyName' does not exist.")
            }
        }
    }
}}

并在gradle.properties中添加一个属性,插件名称后缀为"Version" "jacksonVersion".