gradle - IntelliJ IDEA : How to specify main class in Kotlin?

标签 gradle intellij-idea kotlin

我尝试使用 Intellij Idea 和 Kotlin Gradle 项目构建一个 jar。
当我尝试配置 Artifact 时,Idea 看不到我的主类

这是我的 Gradle :

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.3.60'
    id 'application'
}
group 'org.vladdrummer'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

sourceSets {
    main.java.srcDirs += 'src/main/kotlin/'
}

jar {
    manifest {
        attributes 'Main-Class': 'MovieQuizBackendKt'
    }
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    compile "com.sparkjava:spark-kotlin:1.0.0-alpha"
    implementation 'com.google.code.gson:gson:2.8.2'
    runtime 'mysql:mysql-connector-java:5.1.34'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

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

这是结构:

structure

这是主要类(class):
class MovieQuizBackend {

    fun main(args: Array<String>) {
        Server()
    }
}

最佳答案

在 Kotlin 语言中,入口点不是类内部的方法(名称中带有 Kt 后缀的类是从文件自动生成的)。见 the documentation
您在 MovieQuizBackend.kt 文件中的代码需要更改为以下内容:

fun main(args : Array<String>) {
    Server()
}
只需删除最后的 class MovieQuizBackend {} 即可。
如果您不打算传递任何内容,您甚至可以省略 args:
fun main() {
    Server()
}
另一种选择是在 @JvmStatic 中使用 companion object 注释:
class MovieQuizBackend {
    companion object {
        @JvmStatic fun main(args : Array<String>) {
            Server()
        }
    }
}
请注意,通过这种方式,主类仅命名为 MovieQuizBackend 而不是 MovieQuizBackendKt ,因此您需要在 build.gradle 中更改它:
jar {
    manifest {
        attributes 'Main-Class': 'MovieQuizBackend'
    }
}

关于gradle - IntelliJ IDEA : How to specify main class in Kotlin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59365267/

相关文章:

android - 构建类型始终为 "Release"

android - Intellij IDEA CE 12 Android XML 代码完成不工作

Java/Kotlin- Akka Stream Source.reduce 在 Source 中为 null 时不起作用

regex - 如何通过Kotlin或Java中的正则表达式获取字符串的一部分?

java - 如何从发布构建中排除模块

Android:在我自己的类(class)中获得 NoClassDefFoundError

java - Gradle badass-runtime-plugin 和 ProGuard Gradle 插件

java - 将Java编译为JAR文件后播放WAV文件

android - 未在本地属性中设置自驾车Android “opencv.dir”-Android Studio

java - 未找到 persistence.xml - 使用 NoSql 数据库的 Gradle-Spring-MVC 项目