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
Kt
Kotlin言語では、エントリポイントはクラス内のメソッドではありません(名前にサフィックスが付いたクラスはファイルから自動的に生成されます)。ドキュメント。
ファイル内のコードを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'
}
}