使用Gradle应用程序插件的Kotlin应用程序

pet*_*ric 5 jvm gradle kotlin build.gradle

我想创建使用一个简单的HelloWorld应用程序kotlin,gradle该gradle这个和application插件.当我使用以下设置运行它时,我收到以下错误:

Error: Main method is not static in class com.petarkolaric.helloworld.Main, please define the main method as:
public static void main(String[] args)
Run Code Online (Sandbox Code Playgroud)

我的build.gradle:

group 'helloworld'
version '1.0-SNAPSHOT'

buildscript {
    ext.kotlin_version = '1.2.0'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'kotlin'
apply plugin: 'application'

mainClassName = "com.petarkolaric.helloworld.Main"

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
Run Code Online (Sandbox Code Playgroud)

我的src/main/kotlin/com/petarkolaric/helloworld/Main.kt:

package com.petarkolaric.helloworld

class Main {

    fun main(args : Array<String>) {
        println("Hello, World!")
    }
}
Run Code Online (Sandbox Code Playgroud)

根据这篇博文,我应该能够以这种方式使用应用程序插件.

我需要更改以允许application插件在运行时运行我的主函数gradle run

gue*_*ter 13

正如错误所说,您的主要方法不是静态的.您有以下选择:

1)将主体放入companion object并制作JvmStatic

class Main {
    companion object {
        @JvmStatic
        fun main(args : Array<String>) {
            println("Hello, World!")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

2)改变你classobject- 比你或多或少有一个单身人士class并且做到了JvmStatic

object Main {
    @JvmStatic
    fun main(args : Array<String>) {
        println("Hello, World!")
    }
}
Run Code Online (Sandbox Code Playgroud)

3)将主要课程放在课堂外

fun main(args : Array<String>) {
    println("Hello, World!")
}
class Main {
}
Run Code Online (Sandbox Code Playgroud)

  • 因为类名更改:如果您的文件名为`Main.kt`,它将是`MainKt`. (6认同)
  • 选项 1 和 2 有效,但我认为选项 3 是我更喜欢的。但是,当我尝试它时,似乎 gradle 无法再找到 main 方法:`Error: Main method not found in class com.petarkolaric.helloworld.Main,请将 main 方法定义为: public static void main(String[ ] args)` 你知道这是为什么吗? (2认同)
  • 对于您的示例 3) 值得一提的是,您可以省略 `class Main {}` 部分以及 Alexey 所说的当然。 (2认同)