使用Kotlin配置Gradle

时间:2015-11-16 14:58:10

标签: java intellij-idea kotlin

我正在尝试使用带有gradle的kotlin,但我无法使用Intellij Idea 15成功创建项目。

我创建了包含两个模块hello-javahello-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!")
}

主要模块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)的模块,但是它给了我错误&#34;所有带有kotlin文件的模块都配置了&#34;

帮我stackoverflow,你是我唯一的帮助。

3 个答案:

答案 0 :(得分:12)

  

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

可以找到文档和有用的资源herethere

答案 1 :(得分:4)

为什么我的应用程序没有运行?

您正在创建的Jar并不包含kotlin运行时,因为Gradle只会在其中构建一个带有您的类文件的Jar。我看到您正在使用application插件,因此执行$ gradle run或创建分发并通过提供的shell脚本执行应该可以正常工作。如果你想用你的罐子运送kotlin,你需要制作一个胖罐。

为什么IDEA不识别源目录?

我怀疑这是因为您尚未在构建文件中应用idea插件。我还没有完成与Kotlin的任何工作,但使用其他语言,这是正确设置工作区所必需的。

答案 2 :(得分:0)

我只是说文档说,并且一切正常。 &#34; Kotlin源可以与同一文件夹或不同文件夹中的Java源混合使用。默认约定使用不同的文件夹:

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

如果不使用默认约定,则应更新相应的sourceSets属性:

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

希望它对你有所帮助。