Невозможно запустить глобальное приложение hello, как показано в O'Reilly – Введение в программирование Kotlin

Я пытаюсь дублировать мировую программу hello из видео O'Reilly – Введение в программирование Котлина (Структура приложения 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 

Проблема заключалась в том, что, по-видимому, процессор Javapathpath не расширяет символ ~ (тильда). Когда я заменил это на фактический путь к каталогу, программа запустилась. Использование $ HOME вместо ~ также работает. И, наконец, он будет работать, если символ ~ (тильда) находится впереди класса. По-видимому, оболочка только расширяет его, если он спереди:

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