如何编译Kotlin以将Java jar包含在命令行中?

如何编译Kotlin以将Java jar包含在命令行中?

问题描述:

我想包括jar的jar到Kotlin。我尝试像下面,但我有错误。如何编译Kotlin以将Java jar包含在命令行中?

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?

+0

谢谢你,我解决了!你的答案非常非常容易理解! 你的答案大部分是正确的,但有一个错误。运行应用程序的正确方式不是'java CallJavaTestClassKt -cp kotlin/CallJavaTestClass.jar:javasorce/test/JavaTestClass.jar',而是'java -cp kotlin/CallJavaTestClass.jar:javasorce/test/JavaTestClass.jar CallJavaTestClassKt'。在你的建议中,'java'找不到CallJavaTestClassKt。 – naokichi