如何在gradle项目中从Kotlin类运行主要方法?

时间:2019-05-24 12:32:35

标签: intellij-idea kotlin

前段时间,我在IntelliJ中创建了一个基于gradle的项目来玩耍。我在“ main”中添加了一些Kotlin和Java类,在“ test”中添加了一个Java类。

现在IntelliJ建议我可以运行该测试类。但是没有选项可以“运行”新的Kotlin main(),而我刚刚在主要部分的新.kt文件中添加了它。

一切正常,但是没有任何迹象表明我可以“运行”该主要方法。

我看到了这个question,但这是一个纯Kotlin项目。

我查看了“运行/调试”配置。在模板中,有一个Kotlin。当我使用它时,我可以使用文件选择器查看我的Kotlin类。下降到主要方法。但是“确定”按钮被禁用,因此我无法选择任何东西作为“运行”目标。

我认为可以通过添加此任务来运行我的一个Java类

task execute(type:JavaExec) {
    main = 'com.whatever.Hello'
    classpath = sourceSets.main.runtimeClasspath
}

然后我可以运行gradle[execute]。但是当我将main指向我的Kotlin类之一时,我得到

  

任务:执行失败

     

错误:找不到或加载主类com.whatever.TheKotlinClass

2 个答案:

答案 0 :(得分:1)

您必须设置main = 'com.whatever.TheKotlinClassKt'。 Kotlin编译器更改了已编译类的名称。

有关详情,请参见:What is the reason for using “Kt” suffix in Kotlin classes?

答案 1 :(得分:0)

经过多次尝试/错误,我发现我的gradle脚本缺少许多重要的东西。除此之外,我还忘记了在IntelliJ中将 kotlin 文件夹标记为“源文件夹”(这是我的问题中链接的SO问题的第二个答案建议这样做)。

作为参考,这是我的gradle脚本的工作版本:

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.3.31'
}

version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile "org.mockito:mockito-core:2.+"
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    compile "org.jetbrains.kotlin:kotlin-stdlib-common"
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

task execute(type:JavaExec) {
    main = 'com.whatever.TheKotlinClassKt'
    classpath = sourceSets.main.runtimeClasspath
}

另外,请注意:一旦我发现了如何正确地在gradle项目中编译Kotlin文件,... IntelliJ IDE还会为每个Kotlin类显示“运行”按钮,一个main()。