首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将反射库包含在kotlinc输出的jar中。

将反射库包含在kotlinc输出的jar中。
EN

Stack Overflow用户
提问于 2017-04-11 05:36:57
回答 1查看 890关注 0票数 4

我正在尝试获取示例jar中包含的反射库,但无法使其工作:

代码语言:javascript
复制
$ kotlinc hello.kt -d hello.jar
$ java -jar hello.jar
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics

缺少了运行时库,所以让我们添加它:

代码语言:javascript
复制
$ 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主目录:

代码语言:javascript
复制
$ 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’时,默认情况下应该包括反射库,但情况似乎并非如此。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-11 09:20:54

目前,-include-runtime选项仅包括对结果jar的标准Kotlin库(kotlin-stdlib)。您也应该包括反射库(kotlin-reflect),除非指定了-no-reflect选项。我在跟踪器中创建了一个问题:https://youtrack.jetbrains.com/issue/KT-17344

在问题解决之前:如果您只想在机器上运行编译过的程序,我建议您将应用程序编译到目录而不是jar,然后使用kotlin命令运行main类。

代码语言:javascript
复制
kotlinc hello.kt -d output
kotlin -cp output hello.HelloKt

如果您计划将该程序分发给其他用户,我建议使用Maven或Gradle这样的构建系统,并将kotlin-stdlib/kotlin-reflect指定为适当的依赖项,而不是将它们与您的应用程序捆绑在一起。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43337513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档