2017-10-20 17 views
1

私はKotlinにJavaのjarファイルを含める必要があります。私は以下のようにしてみましたが、エラーがありました。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 

は教えてください。

答えて

1

クラスパス上でJavaライブラリを使用してソースコードをコンパイルするだけでなく、クラスパス上で同じライブラリを使用してプログラムを実行する必要があります。クラスがコンパイル時に存在する場合は、それを使用できるようにするためにも時間が必要です。

いくつかのJARファイルに散らばっそのクラスを持つアプリケーションを実行する正しい方法はjavaにクラスパスとして、それらのJARファイルを渡すために、さらにmain機能を持つクラスを指定することである。

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

上記のコマンドでは、main関数をCallJavaTestClass.ktの最上位に配置したとします(この場合、クラス名は.ktで置き換えられたファイル名で構成され、Ktに置き換えられます)。package ...宣言はありません。パッケージをお持ちの場合は、クラス名の前にcom.example.FileNameKtという名前を付けてください。オブジェクトまたはコンパニオンオブジェクトにmainを宣言する場合は、CallJavaTestClassKtの代わりにクラス名またはオブジェクト名(Ktを除く)を使用します。

も参照してください:あなたにHow to run Kotlin class from the command line?

+0

おかげで、私は解決しました!あなたの答えは非常に理解しやすいです! あなたの答えのほとんどは正しいですが、間違いが1つあります。アプリケーションを実行する正しい方法は 'java CallJavaTestClassKt -cp kotlin/CallJavaTestClass.jar:javasorce/test/JavaTestClass.jar'ではなく' java -cp kotlin/CallJavaTestClass.jar:javasorce/test/JavaTestClass.jar CallJavaTestClassKt'です。あなたの提案では、 'java'はCallJavaTestClassKtを見つけることができませんでした。 – naokichi