用Kotlin配置Gradle

我试图用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项目窗口中的项目结构

在这里输入图像描述

我已经尝试使用Intellij选项来配置模块与Kotlin( Tools->Kotlin->Configure project with Kotlin ),但它给了我错误,“所有与kotlin文件模块配置”

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

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

文件和有用的资源可以在这里和那里找到。

为什么我的应用程序不能运行?

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

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

希望它对你有帮助。