我尝试使用 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"
}
这是结构:
这是主要类(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/