gpt4 book ai didi

kotlin - 在 kotlinc 的 jar 输出中包含反射库

转载 作者:行者123 更新时间:2023-12-05 00:15:56 24 4
gpt4 key购买 nike

我正在尝试获取示例 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,然后使用 kotlin 运行主类。命令。

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

如果你打算将程序分发给其他用户,我建议使用适当的构建系统,如 Maven 或 Gradle 并指定 kotlin-stdlib/ kotlin-reflect作为适当的依赖项,而不是将它们与您的应用程序捆绑在单个 jar 中。

关于kotlin - 在 kotlinc 的 jar 输出中包含反射库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43337513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com