Kotlin 脚本无法实例化 class
Kotlin script unable to instantiate class
尝试 Kotlin Cookbook by Ken Kousen -- 1.5 Executing a Kotlin Script 产生 'unable to instantiate class' 错误。
$ cat southpole.kts
import java.time.*
val instant = Instant.now()
val southPole = instant.atZone(ZoneId.of("Antarctica/South_Pole"))
val dst = southPole.zone.rules.isDaylightSavings(instant)
println("It is ${southPole.toLocalTime()} (UTC${southPole.offset}) at the South Pole")
println("The South Pole ${if (dst) "is" else "is not"} on Daylight Savings Time")
$ kotlinc -script southpole.kts
OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
error: unable to instantiate class Southpole (southpole.kts): java.lang.NoClassDefFoundError: kotlin/script/templates/standard/ScriptTemplateWithArgs
kotlin version 1.3.50
为了工作,println(...)
需要一个必须手动添加的 kotlin 运行时。
这里描述了这个问题https://discuss.kotlinlang.org/t/possible-kts-bug/10162
..., it (script) takes dependencies from the module, so you need to include kotlin-script-runtime to the module dependencies explicitly.
(...) Unfortunately, it is not very obvious. We’re thinking about possible solutions.
这似乎在即将发布的 Kotlin 1.3.60 版本中有所改进
https://youtrack.jetbrains.com/issue/KT-33529
作为解决方法,使用:
$ sdk use kotlin 1.3.41
尝试 Kotlin Cookbook by Ken Kousen -- 1.5 Executing a Kotlin Script 产生 'unable to instantiate class' 错误。
$ cat southpole.kts
import java.time.*
val instant = Instant.now()
val southPole = instant.atZone(ZoneId.of("Antarctica/South_Pole"))
val dst = southPole.zone.rules.isDaylightSavings(instant)
println("It is ${southPole.toLocalTime()} (UTC${southPole.offset}) at the South Pole")
println("The South Pole ${if (dst) "is" else "is not"} on Daylight Savings Time")
$ kotlinc -script southpole.kts
OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
error: unable to instantiate class Southpole (southpole.kts): java.lang.NoClassDefFoundError: kotlin/script/templates/standard/ScriptTemplateWithArgs
kotlin version 1.3.50
为了工作,println(...)
需要一个必须手动添加的 kotlin 运行时。
这里描述了这个问题https://discuss.kotlinlang.org/t/possible-kts-bug/10162
..., it (script) takes dependencies from the module, so you need to include kotlin-script-runtime to the module dependencies explicitly. (...) Unfortunately, it is not very obvious. We’re thinking about possible solutions.
这似乎在即将发布的 Kotlin 1.3.60 版本中有所改进 https://youtrack.jetbrains.com/issue/KT-33529
作为解决方法,使用:
$ sdk use kotlin 1.3.41