首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntelliJ理念:如何在Kotlin中指定主类?

IntelliJ理念:如何在Kotlin中指定主类?
EN

Stack Overflow用户
提问于 2019-12-17 06:42:10
回答 1查看 15.2K关注 0票数 10

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

这是我的Gradle:

代码语言:javascript
复制
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"
}

下面是结构:

下面是主类:

代码语言:javascript
复制
class MovieQuizBackend {

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-17 07:27:45

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

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

代码语言:javascript
复制
fun main(args : Array<String>) {
    Server()
}

只需删除末尾的class MovieQuizBackend {}即可。

如果不打算传递任何参数,甚至可以省略args

代码语言:javascript
复制
fun main() {
    Server()
}

另一种选择是在companion object中使用@JvmStatic注释

代码语言:javascript
复制
class MovieQuizBackend {
    companion object {
        @JvmStatic fun main(args : Array<String>) {
            Server()
        }
    }
}

注意,这样主类就被命名为MovieQuizBackend而不是MovieQuizBackendKt,因此您需要在build.gradle中对其进行更改

代码语言:javascript
复制
jar {
    manifest {
        attributes 'Main-Class': 'MovieQuizBackend'
    }
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59365267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档