无法运行O'Reilly – Kotlin编程简介中所示的hello world应用程序

我试图从O'Reilly视频复制hello world程序 – Kotlin编程入门(Kotlin应用程序的结构)。

这是程序(Main.kt):

package com.hadihariri.kotlincourse fun main(args: Array<String>) { println("Hello World!") } 

编译“kotlinc Main.kt”

视频显示了这种方式来运行它:

 java -cp .:<path to kotlin runtime>/kotlin-runtime.jar com.hadihariri.kotlincourse.MainKt 

对我来说是:

 java -cp .:~/.sdkman/candidates/kotlin/current/lib/kotlin-runtime.jar com.hadihariri.kotlincourse.MainKt 

运行时确实存在于该位置:

 ls -al ~/.sdkman/candidates/kotlin/current/lib/kotlin-runtime.jar -rw-r--r-- 1 user user 879182 Jun 8 18:23 /home/user/.sdkman/candidates/kotlin/current/lib/kotlin-runtime.jar 

但是,如果没有在类路径中指定运行时,将得到相同的错误:

 java -cp .:~/.sdkman/candidates/kotlin/current/lib/kotlin-runtime.jar com.hadihariri.kotlincourse.MainKt Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics at com.hadihariri.kotlincourse.MainKt.main(Main.kt) Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more 

问题是显然,Java类路径处理器不会扩展〜(代字符)字符。 当我用实际的目录路径替换它时,程序运行。 使用$ HOME代替〜也工作。 最后,如果〜(代字符)字符位于类路径的前面,它将起作用。 显然壳只有在前面才能扩展

 java -cp ~/.sdkman/candidates/kotlin/current/lib/kotlin-runtime.jar:. com.hadihariri.kotlincourse.MainKt