2017-10-20 14 views
1

나는 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 

말해주십시오.

답변

1

클래스 경로에서 Java 라이브러리로 소스 코드를 컴파일하는 것 외에도 클래스 경로에서 동일한 라이브러리로 프로그램을 실행해야합니다. 클래스가 컴파일 할 때 거기에 있으면 실행시 classpath에 필요합니다 그것을 사용할 수있는 시간도 있습니다.

여러 JAR에 걸쳐 흩어져 그 클래스를 가진 애플리케이션을 실행하는 올바른 방법 java에 클래스 경로로서 이들 병을 통과하고, 추가적으로 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

감사를 당신에게, 내가 해결! 귀하의 대답은 매우 이해하기 쉽습니다! 답변의 대부분은 정확했지만 한 가지 실수가 있습니다. 응용 프로그램을 실행하는 올바른 방법은'java CallJavaTestClassKt -cp kotlin/CallJavaTestClass.jar : javasorce/test/JavaTestClass.jar'가 아니라'java -cp kotlin/CallJavaTestClass.jar : javasorce/test/JavaTestClass.jar CallJavaTestClassKt'입니다. 귀하의 제안에서, 'java'는 CallJavaTestClassKt를 찾을 수 없습니다. – naokichi