#環境
IDE: IntelliJ IDEA 2017.2.2
言語: Kotlin 1.1.4
OS: macOS Sierra
#概要
Kotlinで書いたプロジェクトKotlinTest
と、同じくKotlinで書いたプロジェクトKotlinTest2
があり、KotlinTest2
はKotlinTest
内のクラスを利用します。KotlinTest2
をコンパイルしたバイナリKotlinTest2-1.0.jar
を実行すると、NoClassDefFoundError
のエラーが発生します。詳細を下記に書きます。この問題を解決するにはどうすれば良いでしょうか?
#詳細な状況
2つのプロジェクトは、IntelliJ IDEAのGradleプロジェクトで作成し、build.gradle
に数行追加して、さらにHello.kt
ファイルを追加した状態になっています。ビルドにあたって、Run>Edit Configurationsを開いてGradleの設定を新しく追加し、その中でGradle projectにそのプロジェクト自身を指定し、Tasksにbuild
を指定し、適用しています。
KotlinTest
プロジェクトは主に以下のファイルから成ります:
gradle
1// build.gradle 2group 'jp.hoge' 3version '1.0' 4 5buildscript { 6 ext.kotlin_version = '1.1.4' 7 8 repositories { 9 mavenCentral() 10 } 11 dependencies { 12 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 13 } 14} 15 16apply plugin: 'java' 17apply plugin: 'kotlin' 18 19sourceCompatibility = 1.8 20 21repositories { 22 mavenCentral() 23} 24 25dependencies { 26 compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version" 27 testCompile group: 'junit', name: 'junit', version: '4.12' 28} 29 30compileKotlin { 31 kotlinOptions.jvmTarget = "1.8" 32} 33compileTestKotlin { 34 kotlinOptions.jvmTarget = "1.8" 35}
kotlin
1// Hello.kt 2package jp.hoge 3 4class Hello 5{ 6 fun Run() 7 { 8 println("Hello, Kotlin!") 9 } 10}
KotlinTest2
のプロジェクトは主に以下のファイルから成ります(KotlinTest
のコンパイル結果KotlinTest-1.0.jar
をlib/
以下に置いてあります):
gradle
1// build.gradle 2group 'jp.hoge2' 3version '1.0' 4 5buildscript { 6 ext.kotlin_version = '1.1.4' 7 8 repositories { 9 mavenCentral() 10 } 11 dependencies { 12 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 13 } 14} 15 16apply plugin: 'java' 17apply plugin: 'kotlin' 18 19sourceCompatibility = 1.8 20 21repositories { 22 mavenCentral() 23} 24 25dependencies { 26 compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version" 27 testCompile group: 'junit', name: 'junit', version: '4.12' 28 compile files('libs/KotlinTest-1.0.jar') // 追加 29} 30 31compileKotlin { 32 kotlinOptions.jvmTarget = "1.8" 33} 34compileTestKotlin { 35 kotlinOptions.jvmTarget = "1.8" 36} 37 38// 以下を追加 39jar{ 40 manifest{ 41 attributes( 42 'Class-Path': configurations.compile.collect { it.getName() }.join(' '), 43 'Main-Class': 'jp.hoge2.HelloKt' 44 ) 45 } 46}
kotlin
1// Hello.kt 2package jp.hoge2 3 4fun main(args: Array<String>) { 5 val hello = jp.hoge.Hello() 6 hello.Run() 7}
実行すると以下のようなエラーが出力されます:
$ java -jar KotlinTest2-1.0.jar Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics at jp.hoge2.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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。