前段时间,我在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
答案 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()。