Как применить плагин в файле .kts (скрипт Kotlin)?

Файлы сценариев Kotlin () предназначены для предоставления исполняемого кода Kotlin в ОДНОМ отдельном файле, что чрезвычайно удобно для написания сценариев или, например, при совместном использовании фрагментов кода в StackOverflow. В отличие от этого, в настоящее время почти вся Java / Kotlin использует систему сборки (например, gradle) с загадочными файлами сборки и глубокой структурой папок.

Хотя мне очень нравится идея сценария Kotlin, кажется, что она почти не используется, всего 22 вопроса по StackOverflow, крайне скудная документация и очень мало результатов Google. Я могу извлекать зависимости, используя @file:DependsOn внутри самого скрипта, а не в традиционном файле сборки:

:

      dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.0'
}

:

      @file:DependsOn("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.0")

Однако я не могу найти способ использовать "применить плагин" в своем .main.ktsфайл. Он не используется ни в одном из фрагментов кода, которые я нашел в Интернете.

:

      apply plugin: 'kotlinx-serialization'

foo.main.kts:

      ???

Для справки я приложил MWE ниже. В сообщении об ошибке говорится, что класс Nodeне сериализуем, но, как указано в этом вопросе, это сообщение вводит в заблуждение, а фактическая проблема apply pluginотсутствует, и я не знаю, как использовать его за пределами build.gradle файл:

      @file:DependsOn("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.0")

import kotlinx.serialization.decodeFromString
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json

@Serializable
data class Node (val numbers: List<Int>)

val h = Json.decodeFromString<Node>(""" {"numbers": [1, 2, 3]} """)

Запустите его на Ubuntu:

      snap install kotlin
kotlin foo.main.kts

1 ответ

Решение

kotlinx-serialization это плагин Gradle, который добавляет в конвейер одноименный плагин компилятора - он генерирует serializer() метод для классов, аннотированных @Serializable.

Когда вы компилируете код Kotlin с kotlinc компилятор, вы можете прикрепить плагин, указав путь к его JAR-файлу (он связан с компилятором), используя -Xplugin=/snap/kotlin/current/lib/kotlinx-serialization-compiler-plugin.jar вариант компилятора.

Для .kts файлов, есть @file:CompilerOptions аннотация, но в настоящее время (в Kotlin 1.5.10) этот конкретный ключ не поддерживается ( warning: the following compiler arguments are ignored on script compilation: -Xplugin)

Командная строка

В командной строке вы можете использовать

      kotlinc -script -Xplugin="/snap/kotlin/current/lib/kotlinx-serialization-compiler-plugin.jar" foo.main.kts

Заголовок скрипта

В качестве обходного пути вы можете использовать эту команду:

      #!/usr/bin/env -S kotlinc -script -Xplugin="/snap/kotlin/current/lib/kotlinx-serialization-compiler-plugin.jar"

Чтобы запустить ваш скрипт, вам нужно превратить его в исполняемый файл:

      chmod u+x foo.main.kts

Теперь его можно запустить с помощью:

      ./foo.main.kts
Другие вопросы по тегам