IntelliJ IDEA: Kotlin でメインクラスを指定するにはどうすればいいですか? 質問する

IntelliJ IDEA: Kotlin でメインクラスを指定するにはどうすればいいですか? 質問する

Kotlin GradleプロジェクトでIntellij Ideaを使用して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"
}

構造は次のとおりです:

構造

メインクラスは次のとおりです:

class MovieQuizBackend {

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

ベストアンサー1

KtKotlin言語では、エントリポイントはクラス内のメソッドではありません(名前にサフィックスが付いたクラスはファイルから自動的に生成されます)。ドキュメント

ファイル内のコードをMovieQuizBackend.kt次のように変更する必要があります。

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

末尾のclass MovieQuizBackend {and を削除するだけです。}

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

おすすめ記事