如何编译Kotlin以包含命令行的Java jar?

我想包括Java的罐子Kotlin。 我尝试像下面,但我有错误。

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

另请参阅: 如何从命令行运行Kotlin类?

    Interesting Posts