#kotlin #gradle
#kotlin #gradle
Вопрос:
Gradle 6.6.1, похоже, несмотря ни на что, использует версию stdlib 1.3.72, что означает, что новые методы, добавленные для свойств в 1.4, не работают. Как ни странно, свойство lazy действительно работает.
Если я просто создам новый проект Gradle, добавьте простой buildSrc с build.gradle вот так:
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.4.0'
}
repositories {
mavenCentral()
}
И я определяю и использую делегированное свойство в buildSrc следующим образом:
class TestPlugin : Plugin<Project> {
override fun apply(p0: Project) {
val x by Delegate()
}
}
class Delegate {
operator fun getValue(thisRef: Any?, property: KProperty<*>) {
}
}
И примените плагин в проекте верхнего уровня: apply plugin: TestPlugin
я получаю предупреждения, касающиеся как версии stdlib 1.3.72, так и версии 1.4, находящейся в пути к классу, и этой ошибки:
Caused by: java.lang.NoSuchMethodError: kotlin.jvm.internal.PropertyReference0Impl.<init>(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
at TestPlugin.<clinit>(TestPlugin.kt)
Я пытался это сделать:
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'org.jetbrains.kotlin') {
details.useVersion '1.4.0'
}
}
}
Но это не помогло. Итак, я могу убедиться, что Gradle использует Kotlin 1.4?
Ответ №1:
В принципе, вы не можете изменить среду выполнения Gradle для использования Kotlin 1.4.0. Одной из веских причин этого является то, что Gradle (6.6) был протестирован в целом с Kotlin 1.3.72, и это может привести к непредвиденным внутренним сбоям, если вы замените среду выполнения. Gradle в конечном итоге объединит Kotlin 1.4.0 (https://github.com/gradle/gradle/issues/12660).