Конфигурирование Gradle с помощью Kotlin

Я пытаюсь использовать kotlin с gradle, но я не могу успешно создать проект с Intellij Idea 15.

Я создаю простой проект с двумя модулями hello-java и hello-kotlin.

hello-java - простой Java-проект, и он отлично компилируется и работает.

hello-kotlin является простым модулем kotin с одним файлом *.kt и build.gradle.
Вот источники:

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!")
}

настройки главного модуля .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, ты моя единственная помощь.

Ответы

Ответ 1

При выполнении строчной сборки gradlew все проекты скомпилированы успешно, но при запуске 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'
}

Документацию и полезные ресурсы можно найти здесь и там.

Ответ 2

Почему мое приложение не запускается?

Создаваемый Jar не включает время выполнения kotlin, поскольку Gradle будет создавать Jar только с вашими файлами класса. Я вижу, что вы используете плагин application, поэтому либо выполнение $ gradle run, либо создание дистрибутива и выполнение через предоставленную оболочку script должны работать нормально. Если вы хотите отправить котлин с помощью Jar, вам нужно создать толстую банку.

Почему IDEA не распознает исходный каталог?

Я подозреваю, что это связано с тем, что вы не применили плагин idea в файле сборки. Я не работал с Kotlin, но с другими языками это необходимо для правильной настройки рабочего пространства.

Ответ 3

Я просто делаю эту документацию, и все работает нормально. "Источники Kotlin могут быть смешаны с источниками Java в одной папке или в разных папках. Стандартное соглашение использует разные папки:

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

Соответствующее свойство sourceSets должно быть обновлено, если не использовать соглашение по умолчанию:

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

Надеюсь, это поможет вам.