我之前已经问过这个问题了,但那里没有任何信息对我有所帮助.
这是我的情况:我无法运行已编译的Kotlin类.当我尝试像普通的java类一样运行它时,我得到以下内容:
C:\Users\User\Desktop>java _DefaultPackage
Exception in thread "main" java.lang.NoClassDefFoundError: jet/runtime/Intrinsics
at _DefaultPackage.main(Finder.kt)
Caused by: java.lang.ClassNotFoundException: jet.runtime.Intrinsics
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 1 more
Run Code Online (Sandbox Code Playgroud)
这让我相信,考虑到输出,Kotlin运行时只是缺失了.所以我尝试了以下方法:
C:\Users\User\Desktop>java -cp kotlin-runtime.jar _DefaultPackage
Error: Could not find or load main class _DefaultPackage
Run Code Online (Sandbox Code Playgroud)
这让我觉得我可能需要将类文件添加到我声明的类路径中,这样:
C:\Users\User\Desktop>java -cp kotlin-runtime.jar';_DefaultPackage.class _DefaultPackage
Error: Could not find or load main class _DefaultPackage
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我只是想了解底层架构,我认为我错了.
以这里的教程为例.
当我做:
kotlinc-jvm hello.kt -include-runtime -d hello.jar
Run Code Online (Sandbox Code Playgroud)
如果编译器已经将代码转换为Java字节码,为什么需要将Kotlin运行时捆绑到jar中?
我有简单的脚本
package com.lapots.game.journey.ims.example
fun main(args: Array<String>) {
println("Hello, world!")
}
Run Code Online (Sandbox Code Playgroud)
这是gradle任务
task runExample(type: JavaExec) {
main ='com.lapots.game.journey.ims.example.Example'
classpath = sourceSets.main.runtimeClasspath
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行任务时,gradle runExample我得到了错误
Error: Could not find or load main class com.lapots.game.journey.ims.example.Example
运行应用程序的正确方法是什么?