Я хочу включить 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 из командной строки?