Как применить плагин в файле .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