Now I use this way:

plugins {
    val kotlinVersion: String by project
    val springBootPluginVersion: String by project
    val springDependencyManagementPluginVersion: String by project

    id("org.jetbrains.kotlin.plugin.allopen") version kotlinVersion
    id("org.jetbrains.kotlin.jvm") version kotlinVersion
    id("org.springframework.boot") version springBootPluginVersion
    id("io.spring.dependency-management") version springDependencyManagementPluginVersion
}

此变体可以编译并工作,但我不知道这种方式是否正确,以及为什么IntelliJ Idea在放置版本定义的行上显示错误:

'val Build_gradle.project: Project' can't be called in this context by implicit receiver. Use the explicit one if necessary

推荐答案

There are a couple issues that have some details around this:

在Gradle的最新版本中,实现这一点的方法是使用settings.gradlesettings.gradle.ktspluginManagement {}块.

In your case, it could look like:

pluginManagement {
  resolutionStrategy {
    eachPlugin {
      when (requested.id.id) {
        "org.jetbrains.kotlin.plugin.allopen" -> {
          val kotlinVersion: String by settings
          useVersion(kotlinVersion)
        }
        "org.jetbrains.kotlin.jvm" -> {
          val kotlinVersion: String by settings
          useVersion(kotlinVersion)
        }
        "org.springframework.boot" -> {
          val springBootPluginVersion: String by settings
          useVersion(springBootPluginVersion)
        }
        "io.spring.dependency-management" -> {
          val springDependencyManagementPluginVersion: String by settings
          useVersion(springDependencyManagementPluginVersion)
        }
      }
    }
  }
}

Kotlin相关问答推荐

如何在Kotlin中反射多个对象以查找特定类型的属性

如何在Kotlin中为接受varargs的函数添加带有默认值的新参数?

kotlin - 挂起简单方法调用链时可能存在冗余分支

用于将 0.5 变为 0 的 round() 函数的模拟

为什么这两个 Kotlin 协程函数不一样?

MyType.()在 Kotlin 中是什么意思?

在 Kotlin 中 import 如何找到文件路径?

如何处理基于枚举提前返回的 forEach 循环,Kotlin 中的一条路径除外

如何将字符串格式化为电话号码kotlin算法

Kotlin 有垃圾收集器吗?如果是这样,它基于哪种算法?

Kotlin 插件错误:无法为类 org.jetbrains.kotlin.gradle.tasks.KotlinCompile 生成代理类

API 'variant.getJavaCompile()' 已过时

Android Studio 4.0.0 Java 8 库在 D8 和 R8 构建错误中脱糖

重复构建失败To use Coroutine features, you must add `ktx`......

Android Kotlin 创建类实现 Parcelable 在 writeToParcel 方法的 override中给出错误

Dagger +Kotlin 不注入

将字符串编码为Kotlin中的UTF-8

使用 java lambda 调用 kotlin 函数时,Kotlin 无法访问 kotlin.jvm.functions.Function1

java.lang.NoClassDefFoundError:解析失败:Lkotlin/time/MonoClock

Kotlin Realm:如果类包含自定义构造函数,则必须声明一个不带参数的公共构造函数