xjc*_*jcl 6 kotlin kotlin-script
Kotlin 脚本 ( .main.kts) 文件的想法是在一个独立文件中提供可执行的 Kotlin 代码,这对于编写脚本或在 StackOverflow 上共享代码片段时非常方便。与此相反,目前几乎所有 Java/Kotlin 都使用具有神秘构建文件和深层文件夹结构的构建系统(例如 gradle)。
虽然我非常喜欢 Kotlin 脚本的想法,但它似乎很少被使用,StackOverflow 上只有 22 个问题,文档极其稀疏,Google 结果也很少。我可以使用@file:DependsOn实际脚本内部而不是传统的构建文件来引入依赖项:
build.gradle:
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.0'
}
Run Code Online (Sandbox Code Playgroud)
foo.main.kts:
@file:DependsOn("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.0")
Run Code Online (Sandbox Code Playgroud)
但是,我找不到在我的.main.kts文件中使用“应用插件”的方法。我在网上找到的任何代码片段都没有使用它。
build.gradle:
apply plugin: 'kotlinx-serialization'
Run Code Online (Sandbox Code Playgroud)
foo.main.kts:
???
Run Code Online (Sandbox Code Playgroud)
作为参考,我在下面附上了 MWE。错误消息表示该类不可序列化,但正如在这个问题中Node指出的那样,该消息具有误导性并且缺少实际问题,我不知道如何在文件之外使用: apply pluginbuild.gradle
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.0'
}
Run Code Online (Sandbox Code Playgroud)
在 Ubuntu 上运行:
@file:DependsOn("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.0")
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
脚本头
作为解决方法,您可以使用此 shebang:
#!/usr/bin/env -S kotlinc -script -Xplugin="/snap/kotlin/current/lib/kotlinx-serialization-compiler-plugin.jar"
Run Code Online (Sandbox Code Playgroud)
要运行脚本,您需要将其转换为可执行文件:
chmod u+x foo.main.kts
Run Code Online (Sandbox Code Playgroud)
现在它可以运行:
./foo.main.kts
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1342 次 |
| 最近记录: |