Incluyendo la biblioteca de reflexión en un file jar generado por kotlinc

Estoy tratando de include la reflexión lib en el jar de muestra, pero no puedo hacer que funcione:

$ kotlinc hello.kt -d hello.jar $ java -jar hello.jar Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics 

La lib de time de ejecución faltaba, así que vamos a agregarla:

 $ kotlinc hello.kt -include-runtime -d hello.jar $ java -jar hello.jar Exception in thread "main" kotlin.jvm.KotlinReflectionNotSupportedError: Kotlin reflection implementation is not found at runtime. Make sure you have kotlin-reflect.jar in the classpath 

Ahora se incluye la lib de time de ejecución, pero falta la lib de la reflexión, así que especifiquemos el directory de inicio de kotlin:

 $ kotlinc hello.kt -include-runtime -kotlin-home ~/.sdkman/candidates/kotlin/1.1.1 -d hello.jar $ java -jar hello.jar Exception in thread "main" kotlin.jvm.KotlinReflectionNotSupportedError: Kotlin reflection implementation is not found at runtime. Make sure you have kotlin-reflect.jar in the classpath 

Reflection lib todavía no está incluido. kotlinc ayuda de kotlinc enumera una opción ' -no-reflect -include-runtime ', por lo que -include-runtime la biblioteca de reflexión debe includese por defecto cuando se establece ' -include-runtime ', pero este no parece ser el caso.

    Actualmente, la opción -include-runtime solo incluye la biblioteca estándar de Kotlin ( kotlin-stdlib ) en el jar resultante. Tiene razón en que la biblioteca de reflexión ( kotlin-reflect ) también debe includese, a less que se especifique la opción -no-reflect kotlin-reflect . Creé un problema en el rastreador: https://youtrack.jetbrains.com/issue/KT-17344

    Hasta que se resuelva el problema: si está buscando una forma de ejecutar el progtwig comstackdo solo en su máquina, le recomiendo que compile su aplicación en el directory en lugar de un jar, y luego ejecute la class principal con el command kotlin .

     kotlinc hello.kt -d output kotlin -cp output hello.HelloKt 

    Sin embargo, si planea distribuir el progtwig a otros usuarios, le recomiendo utilizar un sistema de compilation adecuado como Maven o Gradle y especificar kotlin-stdlib / kotlin-reflect como dependencies adecuadas allí, en lugar de agruparlos con su aplicación en el solo jar.