gpt4 book ai didi

command-line - 如何通过命令行编译Kotlin以包含Java jar?

转载 作者:行者123 更新时间:2023-12-02 13:24:09 26 4
gpt4 key购买 nike

我想在Kotlin中加入一 jar Java。我尝试如下所示,但出现错误。

javac -encoding utf-8 javasorce/test/JavaTestClass.java
jar cvf javasorce/test/JavaTestClass.jar javasorce/test/JavaTestClass.class

kotlinc kotlin/CallJavaTestClass.kt -cp javasorce/test/JavaTestClass.jar -include-runtime -d kotlin/CallJavaTestClass.jar

java -jar kotlin/CallJavaTestClass.jar

错误是:
Exception in thread "main" java.lang.NoClassDefFoundError: 
javasorce/test/JavaTestClass at CallJavaTestClassKt.main(CallJavaTestClass.kt:5)
Caused by: java.lang.ClassNotFoundException: javasorce.test.JavaTestClass
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more

我正在使用像下面的目录:
root
|-javasorce
| |-test
| |-JavaTestClass.java
|-kotlin
|-CallJavaTestClass.kt

请告诉我是否有解决方案。

最佳答案

除了使用类路径上的Java库编译源代码之外,您还需要在类路径上使用相同的库运行程序:如果在编译时有一个类,则还需要在运行时在类路径上使用它来能够使用它。

运行其类分散在多个JAR中的应用程序的正确方法是将那些JAR作为java的类路径传递,并另外指定具有main函数的类:

java CallJavaTestClassKt -cp kotlin/CallJavaTestClass.jar:javasorce/test/JavaTestClass.jar

上面的命令假定您将 main函数放置在 CallJavaTestClass.kt的顶层(在这种情况下,类名由文件名形成, .kt替换为 Kt),并且没有 package ...声明。如果您有一个包,则将其添加到类名 com.example.FileNameKt之前。如果在对象或伴随对象中声明 main,请使用类名或对象名(不带 Kt)代替 CallJavaTestClassKt

另请参阅: How to run Kotlin class from the command line?

关于command-line - 如何通过命令行编译Kotlin以包含Java jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46856709/

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