簡體   English   中英

IntelliJ IDEA:如何在 Kotlin 中指定主類?

[英]IntelliJ IDEA: How to specify main class in Kotlin?

我嘗試使用 Intellij Idea 和 Kotlin Gradle 項目構建一個 jar。 當我嘗試配置 Artifact 時,Idea 看不到我的主類

這是我的搖籃:

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"
}

這是結構:

結構體

這是主要課程:

class MovieQuizBackend {

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

在 Kotlin 語言中,入口點不是類內部的方法(名稱中帶有Kt后綴的類是從文件自動生成的)。 請參閱文檔

您在MovieQuizBackend.kt文件中的代碼需要更改為以下內容:

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

只需在最后刪除class MovieQuizBackend {}

如果您不打算傳遞任何args ,您甚至可以省略args

fun main() {
    Server()
}

另一種選擇是在companion object使用@JvmStatic注釋:

class MovieQuizBackend {
    companion object {
        @JvmStatic fun main(args : Array<String>) {
            Server()
        }
    }
}

請注意,通過這種方式,主類僅命名為MovieQuizBackend而不是MovieQuizBackendKt ,因此您需要在build.gradle更改它:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM