2017-12-15 24 views
1

私はScalaコードをコールするKotlinの概念証明を作成しようとしています。両方の言語をコンパイルする次にScala&Kotlinの手動JARコンパイル

kotlin-src/ 
    hello.kt 
scala-src/ 
    Hello.scala 

:ここ

は、プロジェクトは、現時点では次のようになります

META-INF/ 
    main.kotlin_module 
HelloKt.class 
HelloScala.class 
:ルートディレクトリに以下のファイルが生成さ

kotlinc kotlin-src/*.kt 
scalac scala-src/*.scala 

私はJARに変身しようとしました:

jar cvfM run.jar *.class META-INF 

しかし、実行されません(私は主なクラスを指定していないためだと思います)。

$ java -jar run.jar 
Error: Invalid or corrupt jarfile run.jar 

だから、私は次のマニフェストを作成しました:

Main-Class: HelloKt 

jarファイルをコンパイルする前に、このファイルはMETA-INFディレクトリにコピーされますと、以下のように結果のjarファイルの構造は次のとおりです。

HelloKt.class 
HelloScala.class 
META-INF/ 
META-INF/main.kotlin_module 
META-INF/MANIFEST.MF 

新しいJARは実行されますが、実行時例外では常に失敗します。

$ java -jar run.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics 
    at HelloKt.main(hello.kt) 
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 1 more 

Kotlinクラスでメインメソッドをコンパイルして実行するために必要な残りの手順は何ですか?

Scala/Kotlinコードにバンドルする必要があるランタイムクラスはありますか?

+3

エラーsuggを実行しているときSTDLIBは、javaコマンドのクラスパスパラメータにSTDLIBジャーとディレクトリを追加します。あなたはあなたのクラスパスにkotlin stdlibを持っていない – s1m0nw1

答えて

2

私はそれをテストしていませんが、それは動作するはずです:

  1. あなたはMavenの中央から
  2. ダウンロードkotlin-STDLIB瓶を持っているとして、あなたのコードをコンパイルし
  3. は、あなたが同じバージョンを使用していることを確認します
  4. をコンパイル中瓶
関連する問題