Scala和Kotlin的手动JAR编译
我正在尝试为Kotlin创建一个调用Scala代码的概念certificate。
以下是目前项目的情况:
kotlin-src/ hello.kt scala-src/ Hello.scala
然后编译这两种语言:
kotlinc kotlin-src/*.kt scalac scala-src/*.scala
在根目录下生成以下文件:
META-INF/ main.kotlin_module HelloKt.class HelloScala.class
我试图变成一个JAR:
jar cvfM run.jar *.class META-INF
但是,它不会运行(我认为这是因为我没有指定一个主类)。
$ java -jar run.jar Error: Invalid or corrupt jarfile run.jar
所以,我创建了以下清单:
Main-Class: HelloKt
在编译jar之前,这个文件被复制到META-INF
目录下,结果如下:
HelloKt.class HelloScala.class META-INF/ META-INF/main.kotlin_module META-INF/MANIFEST.MF
新的JAR将执行,但总是失败并产生运行时exception。
$ java -jar run.jar Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics at HelloKt.main(hello.kt) Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more
在Kotlin类中编译和运行主要方法所需的剩余步骤是什么?
是否有需要与Scala / Kotlin代码捆绑在一起的运行时间类来实现这个function?
我没有测试过,但它应该工作:
- 编译你的代码,因为你有
- 从Maven Central下载kotlin-stdlib jar
- validation您在编译时使用了相同版本的stdlib
- 运行jar时,用stdlib jar将目录添加到java命令的classpath参数中