web-dev-qa-db-ja.com

Kotlinを使用したGradleの構成

Gradleでkotlinを使用しようとしていますが、Intellij Idea 15でプロジェクトを正常に作成できません。

2つのモジュールhello-Javahello-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プロジェクトウィンドウのプロジェクト構造は次のとおりです

enter image description here

Intellijオプションを使用してKotlin(Tools->Kotlin->Configure project with Kotlin)でモジュールを構成しようとしましたが、「kotlinファイルを持つすべてのモジュールが構成されています」というエラーが表示されます

Stackoverflowを助けてください。あなたは私の唯一の助けです。

18
Filip Zymek

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'
}

ドキュメントと有用なリソースは here および there にあります。

12
aga

アプリケーションが実行されないのはなぜですか?

Gradleはyourクラスファイルを含むJarのみを構築するため、作成しているJarにはkotlinランタイムが含まれていません。 applicationプラグインを使用しているので、$ gradle runまたは、ディストリビューションを作成し、提供されたシェルスクリプトを介して実行しても問題ありません。コトリンをジャーと一緒に発送したい場合は、太いジャーを作成する必要があります。

なぜIDEAソースディレクトリを認識しないのですか?

これは、ビルドファイルでideaプラグインを適用していないことが原因だと思います。私はKotlinで何もしていませんが、他の言語では、ワークスペースを正しく設定するためにこれが必要です。

4
tddmonkey

ドキュメントに書かれているとおりにすれば、すべて正常に機能します。 「Kotlinのソースは、Javaソースと同じフォルダーまたは異なるフォルダーに混在させることができます。デフォルトの規則では、異なるフォルダーを使用しています。

project
    - src
        - main (root)
            - kotlin
            - Java

デフォルトの規則を使用しない場合は、対応するsourceSetsプロパティを更新する必要があります。

sourceSets {
    main.kotlin.srcDirs += 'src/main/myKotlin'
    main.Java.srcDirs += 'src/main/myJava'
}

お役に立てば幸いです。

0
Kirill Bitkov