使用 Kotlin 配置 Gradle
Configuring Gradle with 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!")
}
主模块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 项目中的项目结构 window
我尝试使用 Intellij 选项通过 Kotlin (Tools->Kotlin->Configure project with Kotlin
) 配置模块,但它给我的错误是 "All modules with kotlin files are configured"
帮我Whosebug,你是我唯一的帮助。
为什么我的应用程序没有 运行?
您正在创建的 Jar 不包括 kotlin 运行时间,因为 Gradle 只会使用 您的 class 里面的文件。我看到您正在使用 application
插件,因此无论是执行 $ gradle run
还是创建分发并通过提供的 shell 脚本执行都应该可以正常工作。如果你想用你的 Jar 运送 kotlin,你需要创建一个 fat jar。
为什么IDEA不识别源目录?
我怀疑这是因为您没有在构建文件中应用 idea
插件。我没有用 Kotlin 做过任何工作,但是对于其他语言,这是正确设置工作区所必需的。
When running gradlew clean build all projects are compiled successfully, but when running java -jar hello-kotlin-1.0-SNAPSHOT.jar I get following error...
jar {
manifest {
attributes 'Main-Class': 'HelloKotlinKt'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
What is more, Intellij seems not to recognize src/main/kotlin directory as source directory (it's not marked in blue)...
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
可以找到文档和有用的资源 here and there。
我只是按照文档中的说明进行操作,并且一切正常。
“Kotlin 源代码可以与 Java 源代码混合在同一文件夹或不同文件夹中。默认约定是使用不同的文件夹:
project
- src
- main (root)
- kotlin
- java
如果不使用默认约定,则应更新相应的 sourceSets 属性:
sourceSets {
main.kotlin.srcDirs += 'src/main/myKotlin'
main.java.srcDirs += 'src/main/myJava'
}
希望对你有所帮助。
我正在尝试将 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!")
}
主模块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 项目中的项目结构 window
我尝试使用 Intellij 选项通过 Kotlin (Tools->Kotlin->Configure project with Kotlin
) 配置模块,但它给我的错误是 "All modules with kotlin files are configured"
帮我Whosebug,你是我唯一的帮助。
为什么我的应用程序没有 运行?
您正在创建的 Jar 不包括 kotlin 运行时间,因为 Gradle 只会使用 您的 class 里面的文件。我看到您正在使用 application
插件,因此无论是执行 $ gradle run
还是创建分发并通过提供的 shell 脚本执行都应该可以正常工作。如果你想用你的 Jar 运送 kotlin,你需要创建一个 fat jar。
为什么IDEA不识别源目录?
我怀疑这是因为您没有在构建文件中应用 idea
插件。我没有用 Kotlin 做过任何工作,但是对于其他语言,这是正确设置工作区所必需的。
When running gradlew clean build all projects are compiled successfully, but when running java -jar hello-kotlin-1.0-SNAPSHOT.jar I get following error...
jar {
manifest {
attributes 'Main-Class': 'HelloKotlinKt'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
What is more, Intellij seems not to recognize src/main/kotlin directory as source directory (it's not marked in blue)...
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
可以找到文档和有用的资源 here and there。
我只是按照文档中的说明进行操作,并且一切正常。 “Kotlin 源代码可以与 Java 源代码混合在同一文件夹或不同文件夹中。默认约定是使用不同的文件夹:
project
- src
- main (root)
- kotlin
- java
如果不使用默认约定,则应更新相应的 sourceSets 属性:
sourceSets {
main.kotlin.srcDirs += 'src/main/myKotlin'
main.java.srcDirs += 'src/main/myJava'
}
希望对你有所帮助。