我正在从命令行构建一个 kotlin jvm 项目。
平原kotlinc foo.kt -include-runtime -d example.jar和kotlin test.jar序列运作良好。
然而,我只是第一次在我的代码中使用协程,由此产生的消息让我明白我必须在编译中包含协程 jar 文件。
kotlinc -include-runtime -classpath /snap/kotlin/current/lib/kotlinx-coroutines-core-1.0.1.jar -d example.jar example.kt
尝试运行它,两者
kotlin example.jar
kotlin -classpath /snap/kotlin/current/lib/kotlinx-coroutines-core-1.0.1.jar example.jar
说Exception in thread "main" java.lang.NoClassDefFoundError: kotlinx/coroutines/BuildersKt,这很令人烦恼,因为 jarfile 似乎包含这些符号:
$ unzip -l /snap/kotlin/current/lib/kotlinx-coroutines-core-1.0.1.jar |grep BuildersKt
3687 2018-11-08 08:14 kotlinx/coroutines/BuildersKt.class
8270 2018-11-08 08:14 kotlinx/coroutines/BuildersKt__Builders_commonKt.class
3902 2018-11-08 08:14 kotlinx/coroutines/BuildersKt__BuildersKt.class
回想一下,kotlin Jarfile就像java -jar Jarfile
$ java -classpath /snap/kotlin/current/lib/kotlinx-coroutines-core-1.0.1.jar -jar example.jar
Exception in thread "main" java.lang.NoClassDefFoundError: kotlinx/coroutines/BuildersKt
at ExampleKt.main(example.kt:16)
Caused by: java.lang.ClassNotFoundException: kotlinx.coroutines.BuildersKt
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 1 more
在不使用 gradle 之类的情况下,有人可以解释必须为 kotlin/java 的命令行指定什么以使其了解如何通过访问协程功能来构建或运行吗?提前致谢!