Сериализация Kotlin: «Неразрешенная ссылка: сериализатор» - PullRequest
0 голосов
/ 18 февраля 2019

Я пробую сериализацию Kotlin.После настройки, следуя указаниям, я получаю ошибку сборки Unresolved reference: serializer с этим кодом:

val serializer : KSerializer<User> = User.serializer()

Я предполагаю, что плагин компилятора как-то не сработал, но не вижу, что япропустил в настройке.

Вот мой build.gradle.kts:

buildscript {
    val kotlinVer: String by extra("1.3.20")
    repositories { jcenter() }

    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVer")
        classpath("org.jetbrains.kotlin:kotlin-serialization:$kotlinVer")
    }
}

plugins {
    id("org.jetbrains.kotlin.jvm").version("1.3.20")

    application

    "kotlin"
    "kotlinx-serialization"
}

repositories {
    jcenter()
    maven("https://kotlin.bintray.com/kotlinx")
}

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    compile("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.10.0")

    testImplementation("org.jetbrains.kotlin:kotlin-test")

    testImplementation("org.jetbrains.kotlin:kotlin-test-junit")
}

application {
    mainClassName = "com.digizen.AppKt"
}

1 Ответ

0 голосов
/ 20 февраля 2019

В plugins, вы не можете просто поместить строку, как вы сделали, варианты (для .kts) :

plugins {
    `«plugin id»`                                             // (1)
    id(«plugin id»)                                           // (2)
    id(«plugin id») version «plugin version» [apply «false»]  // (3)
} 

Я думаю, что плагин KotlinСам активируется из-за id("org.jetbrains.kotlin.jvm").version("1.3.20"), а не из-за "kotlin".

README сообщает

Gradle (с блоком плагинов)

Вы можете настроить плагин сериализации с помощью плагина kotlin, используя вместо этого DSL плагинов Gradleтрадиционного плагина применения:

plugins {
    id 'kotlin-multiplatform' version '1.3.20'
    id 'kotlinx-serialization' version '1.3.20'
}

В этом случае, поскольку плагин сериализации еще не опубликован на портале плагинов Gradle, вам необходимо добавить правила разрешения плагинов в свои настройки. gradle:

pluginManagement {
    resolutionStrategy {
        eachPlugin {
            if (requested.id.id == "kotlin-multiplatform") {
                useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${requested.version}")
            }
            if (requested.id.id == "kotlinx-serialization") {
                useModule("org.jetbrains.kotlin:kotlin-serialization:${requested.version}")
            }
        }
    }
}

Не забудьте удалить зависимость classpath для плагина из зависимостей buildscript, в противном случае вы получите ошибку о конфликтующих версиях.

Поэтому наименьшее изменение будет заключаться в удалениидве строки из блока plugins и добавьте

apply plugin: 'kotlinx-serialization'

вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...