Gradleでkotlinを使用しようとしていますが、Intellij Idea 15でプロジェクトを正常に作成できません。
2つのモジュールhello-Java
とhello-kotlin
を使用して簡単なプロジェクトを作成しました。
hello-Java
は単純なJavaプロジェクトであり、完全にコンパイルおよび実行されています。
hello-kotlin
は、*。ktファイルとbuild.gradle
ファイルが1つだけの単純なkotinモジュールです。
ここにソースがあります:
build.gradle
group 'pl.fzymek.kotlin'
version '1.0-SNAPSHOT'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:0.10.4"
}
}
apply plugin: 'kotlin'
apply plugin: 'application'
mainClassName = 'HelloKotlinKt'
repositories {
mavenCentral()
}
jar {
manifest {
attributes 'Main-Class': mainClassName
}
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:0.10.4"
}
HelloKotlin.kt
fun main(args: Array<String>) {
println("Hello, Kotlin!")
}
メインモジュールsettings.gradle
include 'hello-Java'
include 'hello-kotlin'
gradlew clean build
を実行すると、すべてのプロジェクトが正常にコンパイルされますが、Java -jar hello-kotlin-1.0-SNAPSHOT.jar
を実行すると、次のエラーが発生します。
Exception in thread "main" Java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
at HelloKotlinKt.main(HelloKotlin.kt)
Caused by: Java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
at Java.net.URLClassLoader.findClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
at Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
さらに、Intellijはsrc/main/kotlin
ディレクトリをソースディレクトリとして認識しないようで(青色でマークされていません)、HelloKotlin.ktファイルを編集するときにオートコンプリート機能を使用できません。
Intellijプロジェクトウィンドウのプロジェクト構造は次のとおりです
Intellijオプションを使用してKotlin(Tools->Kotlin->Configure project with Kotlin
)でモジュールを構成しようとしましたが、「kotlinファイルを持つすべてのモジュールが構成されています」というエラーが表示されます
Stackoverflowを助けてください。あなたは私の唯一の助けです。
Gradlew clean buildを実行すると、すべてのプロジェクトが正常にコンパイルされますが、Java -jar hello-kotlin-1.0-SNAPSHOT.jarを実行すると、次のエラーが発生します...
jar {
manifest {
attributes 'Main-Class': 'HelloKotlinKt'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
さらに、Intellijはsrc/main/kotlinディレクトリをソースディレクトリとして認識しないようです(青色でマークされていません)...
sourceSets {
main.Java.srcDirs += 'src/main/kotlin'
}
アプリケーションが実行されないのはなぜですか?
Gradleはyourクラスファイルを含むJarのみを構築するため、作成しているJarにはkotlinランタイムが含まれていません。 application
プラグインを使用しているので、$ gradle run
または、ディストリビューションを作成し、提供されたシェルスクリプトを介して実行しても問題ありません。コトリンをジャーと一緒に発送したい場合は、太いジャーを作成する必要があります。
なぜIDEAソースディレクトリを認識しないのですか?
これは、ビルドファイルでidea
プラグインを適用していないことが原因だと思います。私はKotlinで何もしていませんが、他の言語では、ワークスペースを正しく設定するためにこれが必要です。
ドキュメントに書かれているとおりにすれば、すべて正常に機能します。 「Kotlinのソースは、Javaソースと同じフォルダーまたは異なるフォルダーに混在させることができます。デフォルトの規則では、異なるフォルダーを使用しています。
project
- src
- main (root)
- kotlin
- Java
デフォルトの規則を使用しない場合は、対応するsourceSetsプロパティを更新する必要があります。
sourceSets {
main.kotlin.srcDirs += 'src/main/myKotlin'
main.Java.srcDirs += 'src/main/myJava'
}
お役に立てば幸いです。