在 kotlinc 输出的 jar 中包含反射库
Including the reflection library in a jar output by kotlinc
我正在尝试获取示例 jar 中包含的反射库,但无法正常工作:
$ kotlinc hello.kt -d hello.jar
$ java -jar hello.jar
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
缺少运行时库,让我们添加它:
$ 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
现在包含运行时库,但缺少反射库,所以让我们指定 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
仍然没有包含反射库。 kotlinc
帮助列出了一个 '-no-reflect
' 选项,所以我假设反射库应该在设置 '-include-runtime
' 时默认包含,但这似乎不是案例.
目前 -include-runtime
选项仅将标准 Kotlin 库 (kotlin-stdlib
) 添加到生成的 jar 中。你说得对,反射库 (kotlin-reflect
) 也应该包括在内,除非指定了 -no-reflect
选项。我在跟踪器中创建了一个问题:https://youtrack.jetbrains.com/issue/KT-17344
直到问题解决:如果您正在寻找一种方法 运行 只在您的机器上编译程序,我建议您将您的应用程序编译到目录而不是 jar,然后运行 主要 class 与 kotlin
命令。
kotlinc hello.kt -d output
kotlin -cp output hello.HelloKt
如果您打算将程序分发给其他用户,我建议使用适当的构建系统,如 Maven 或 Gradle,并适当指定 kotlin-stdlib
/kotlin-reflect
那里的依赖项,而不是将它们与您的应用程序捆绑在一个 jar 中。
我正在尝试获取示例 jar 中包含的反射库,但无法正常工作:
$ kotlinc hello.kt -d hello.jar
$ java -jar hello.jar
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
缺少运行时库,让我们添加它:
$ 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
现在包含运行时库,但缺少反射库,所以让我们指定 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
仍然没有包含反射库。 kotlinc
帮助列出了一个 '-no-reflect
' 选项,所以我假设反射库应该在设置 '-include-runtime
' 时默认包含,但这似乎不是案例.
目前 -include-runtime
选项仅将标准 Kotlin 库 (kotlin-stdlib
) 添加到生成的 jar 中。你说得对,反射库 (kotlin-reflect
) 也应该包括在内,除非指定了 -no-reflect
选项。我在跟踪器中创建了一个问题:https://youtrack.jetbrains.com/issue/KT-17344
直到问题解决:如果您正在寻找一种方法 运行 只在您的机器上编译程序,我建议您将您的应用程序编译到目录而不是 jar,然后运行 主要 class 与 kotlin
命令。
kotlinc hello.kt -d output
kotlin -cp output hello.HelloKt
如果您打算将程序分发给其他用户,我建议使用适当的构建系统,如 Maven 或 Gradle,并适当指定 kotlin-stdlib
/kotlin-reflect
那里的依赖项,而不是将它们与您的应用程序捆绑在一个 jar 中。