упаковать файл Kotlin .class в JAR для выполнения

После учебника по «Kotlin – компиляция и запуск из командной строки Windows» отсутствует манифест:

thufir@dur:~/kotlin$ thufir@dur:~/kotlin$ ll total 32 drwxr-xr-x 2 thufir thufir 4096 Oct 27 08:29 ./ drwx------ 46 thufir thufir 16384 Oct 27 08:03 ../ -rw-r--r-- 1 thufir thufir 107 Oct 27 08:29 HelloWorld.kt thufir@dur:~/kotlin$ thufir@dur:~/kotlin$ kotlinc HelloWorld.kt -include-runtime -d HelloWorld.jar WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by com.intellij.util.text.StringFactory to constructor java.lang.String(char[],boolean) WARNING: Please consider reporting this to the maintainers of com.intellij.util.text.StringFactory WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release thufir@dur:~/kotlin$ thufir@dur:~/kotlin$ thufir@dur:~/kotlin$ java -jar HelloWorld.jar no main manifest attribute, in HelloWorld.jar thufir@dur:~/kotlin$ thufir@dur:~/kotlin$ cat HelloWorld.kt class HelloWorld { fun main(args: Array<String>) { println("Hello, world!" + args[0]) } } thufir@dur:~/kotlin$ thufir@dur:~/kotlin$ kotlin -classpath HelloWorld.jar HelloWorldKt error: could not find or load main class HelloWorldKt thufir@dur:~/kotlin$ thufir@dur:~/kotlin$ kotlin -classpath HelloWorld.jar HelloWorld error: 'main' method of class HelloWorld is not static. Please ensure that 'main' is either a top level Kotlin function, a member function annotated with @JvmStatic, or a static Java method thufir@dur:~/kotlin$ 

Разумеется, в jar отсутствует атрибут Main-Class в качестве точки входа для выполнения:

 thufir@dur:~/kotlin$ thufir@dur:~/kotlin$ jar -xf HelloWorld.jar thufir@dur:~/kotlin$ thufir@dur:~/kotlin$ tree META-INF/ META-INF/ └── MANIFEST.MF 0 directories, 1 file thufir@dur:~/kotlin$ thufir@dur:~/kotlin$ cat META-INF/MANIFEST.MF Manifest-Version: 1.0 Created-By: JetBrains Kotlin thufir@dur:~/kotlin$ 

Почему учебник способен запускать созданный им файл jar ?

    Проблема, как и в вашем другом вопросе, заключается в том, что вы используете класс с методом экземпляра. Это просто не сработает, потому что main должно быть статическим (а ваше – нет). В Kotlin вам не нужен класс для определения main метода, просто используйте функции:

    Hello.kt :

     fun main(args: Array<String>) { println("Hello, world!" + args[0]) } 

    kotlinc & shell :

     $ kotlinc Hello.kt -include-runtime -d HelloWorld.jar $ java -jar HelloWorld.jar test Hello, world!test