使用 Kotlin 配置 Gradle

2022-09-02 13:43:40

我正在尝试将 kotlin 与 gradle 一起使用,但我无法成功使用 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!")
}

主模块设置.gradle

include 'hello-java'
include 'hello-kotlin'

当运行所有项目都成功编译时,但是当运行时,我得到以下错误:gradlew clean buildjava -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似乎没有将目录识别为源目录(它没有标记为蓝色),并且在编辑HelloKotlin.kt文件时我无法使用自动完成功能。src/main/kotlin

这是我在 Intellij 项目窗口中的项目结构

enter image description here

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

帮帮我堆流,你是我唯一的帮助。


答案 1

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

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


答案 2

为什么我的应用程序无法运行?

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

为什么 IDEA 无法识别源目录?

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


推荐