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

Gradle IntelliJ IDEA:如何在Kotlin中指定主类?,gradle,intellij-idea,kotlin,Gradle,Intellij Idea,Kotlin,我试图用Intellij Idea和Kotlin Gradle项目构建一个jar。 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 rep

我试图用Intellij Idea和Kotlin Gradle项目构建一个jar。 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()
    }
}
class MovieQuizBackend{
趣味主线(args:Array){
服务器()
}
}

在Kotlin语言中,入口点不是类内的方法(名称中带有
Kt
后缀的类是从文件自动生成的)。看

需要将
MovieQuizBackend.kt
文件中的代码更改为以下内容:

fun main(args : Array<String>) {
    Server()
}
另一个选项是在
伴生对象中使用
@JvmStatic
注释:

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

MovieQuizBackend
看起来怎么样?它是否在IntelliJ IDEA中运行,而不是在jar中运行?@CrazyCoder我添加了它。不,它没有添加为运行它们的主类,这太奇怪了。我想知道为什么我们需要没有类的kt文件,我应该添加@JvmStatic吗。但是所有这些看起来都很奇怪,对于长期从事Java开发的人来说可能很奇怪,但是对于新的程序员来说,这是很自然的,可以节省大量的输入。试着向一个刚开始编写代码的学生解释为什么在Java中需要一个类和静态main方法来打印“HelloWorld”。Kotlin试图简化事情并减少您需要编写的代码量。如果您不使用它们,您甚至不需要
args:Array
。您是否使用Gradle或IntelliJ IDEA工件构建jar?@CrazyCoder artifact via IDEA
class MovieQuizBackend {
    companion object {
        @JvmStatic fun main(args : Array<String>) {
            Server()
        }
    }
}
jar {
    manifest {
        attributes 'Main-Class': 'MovieQuizBackend'
    }
}