2017-12-15 6 views
1

스콧 코드를 호출하는 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 

항아리를 컴파일하기 전에,이 파일은 META-INF 디렉토리에 복사됩니다 다음과 같이 결과 단지의 구조는 다음과 같습니다

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 클래스에서 main 메서드를 컴파일하고 실행하는 데 필요한 나머지 단계는 무엇입니까?

이 작업을 수행하기 위해 스칼라/코 틀린 코드와 함께 번들로 제공해야하는 런타임 클래스가 있습니까?

+3

오류 sugg을 실행할 때 다음 stdlib는 자바 명령의 클래스 경로 매개 변수에 다음 stdlib 항아리 디렉토리를 추가 당신은 당신의 classpath에 kotlin stdlib을 가지고 있지 않은 것입니다. – s1m0nw1

답변

2

나는 그것을 테스트하지 않은,하지만 작동합니다 :

  1. 당신이 동일한 버전을 사용하는지 확인 메이븐 중앙에서 당신이
  2. 다운로드 코 틀린-다음 stdlib 병을 가지고있는 코드를 컴파일
  3. 를 컴파일하는 동안 항아리