如何从命令行运行 kotlin 脚本?

时间:2021-07-24 14:57:08

标签: kotlin

如何从命令行运行 kotlin 脚本?没有 maven、gradle 或 kotlin-DSL-gradle,只有命令行选项。

我在 play 文件夹中有两个 kotlin 文件

user.kt

data class User(val name: String)

play.kts

fun main() {
  val user = User("Jim")
  println("Hello ${user.name}")
}

它不起作用

kotlinc -script play.kts
error: unresolved reference: User (play.kts:4:14)
play.kts:4:14: error: unresolved reference: User
  val user = User("Jim")

但是如果我将它重命名为 play.kt 并使用下面的命令运行它会起作用。

kotlinc . -include-runtime -d play.jar && java -jar play.jar

为什么会这样,以及如何使其发挥作用?

1 个答案:

答案 0 :(得分:1)

在脚本模式下,没有任何东西将这两个文件链接在一起,因此编译器无法知道在哪里可以找到 User 类,因为默认情况下它只是解析 play.kts 文件。

您有多种选择来实现您想要的:

  1. 将您的播放脚本重命名为 play.main.kts,将 user.kt 重命名为 user.kts,将 @file:Import("user.kts") 添加到播放脚本的顶部,然后使用您的第一个尝试命令运行它

  2. 使用kotlinc user.kt编译user.kt文件(注意它不是kts,所以需要编译才能使用),这会将它编译为当前目录中的user.class,并且然后将当前目录添加到脚本运行器的类路径中:kotlinc -cp . -script play.kts

第一个可能是最通用的,它还允许您使用 @file:DependsOn(<gradle-style-dep>) 添加远程依赖项。所有这些都只在文件名以 .main.kts 结尾时才有效。

请注意,您仍然需要在脚本中执行该 main 函数才能执行任何操作,因此在您拥有的内容下方添加 main()。

您可以使用 https://github.com/Kotlin/KEEP/blob/master/proposals/scripting-support.md 自己拼凑这些信息以及更多内容,但是我对这一切的记录都非常糟糕(尽管它运行良好)