如何在 .kts(Kotlin 脚本)文件中应用插件?
How do I apply a plugin in a .kts (Kotlin script) file?
Kotlin 脚本 (.main.kts
) 文件的想法是在 一个独立的文件 中提供可执行的 Kotlin 代码,这对于编写脚本或共享代码片段非常方便例如在 Whosebug 上。与此相反,目前几乎所有 Java/Kotlin 都使用具有神秘构建文件和深层文件夹结构的构建系统(例如 gradle)。
虽然我非常喜欢 Kotlin 脚本的想法,但它似乎很少被使用,Whosebug 上只有 22 个问题,非常稀疏 文档和珍贵的少数 Google结果。我可以在实际脚本中使用 @file:DependsOn
而不是传统的构建文件来引入依赖项:
build.gradle
:
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.0'
}
foo.main.kts
:
@file:DependsOn("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.0")
但是,我无法在 .main.kts
文件中找到使用“应用插件”的方法。我在网上找到的任何代码片段中都没有使用它。
build.gradle
:
apply plugin: 'kotlinx-serialization'
foo.main.kts
:
???
作为参考,我在下面附上了一个 MWE。错误消息说 class 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
kotlinx-serialization
是一个 Gradle 插件,它添加到管道同名编译器插件 - 它为 类 生成 serializer()
方法,注释为 @Serializable
.
当您使用 kotlinc
编译器编译 Kotlin 代码时,您可以通过使用 -Xplugin=/snap/kotlin/current/lib/kotlinx-serialization-compiler-plugin.jar
编译器选项提供其 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
脚本头
作为解决方法,您可以使用这个 shebang:
#!/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
Kotlin 脚本 (.main.kts
) 文件的想法是在 一个独立的文件 中提供可执行的 Kotlin 代码,这对于编写脚本或共享代码片段非常方便例如在 Whosebug 上。与此相反,目前几乎所有 Java/Kotlin 都使用具有神秘构建文件和深层文件夹结构的构建系统(例如 gradle)。
虽然我非常喜欢 Kotlin 脚本的想法,但它似乎很少被使用,Whosebug 上只有 22 个问题,非常稀疏 文档和珍贵的少数 Google结果。我可以在实际脚本中使用 @file:DependsOn
而不是传统的构建文件来引入依赖项:
build.gradle
:
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.0'
}
foo.main.kts
:
@file:DependsOn("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.0")
但是,我无法在 .main.kts
文件中找到使用“应用插件”的方法。我在网上找到的任何代码片段中都没有使用它。
build.gradle
:
apply plugin: 'kotlinx-serialization'
foo.main.kts
:
???
作为参考,我在下面附上了一个 MWE。错误消息说 class 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
kotlinx-serialization
是一个 Gradle 插件,它添加到管道同名编译器插件 - 它为 类 生成 serializer()
方法,注释为 @Serializable
.
当您使用 kotlinc
编译器编译 Kotlin 代码时,您可以通过使用 -Xplugin=/snap/kotlin/current/lib/kotlinx-serialization-compiler-plugin.jar
编译器选项提供其 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
脚本头
作为解决方法,您可以使用这个 shebang:
#!/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