gradle - 带有 Gradle 应用程序插件的 Kotlin 应用程序

标签 gradle jvm kotlin build.gradle

我正在尝试使用 kotlingradle 和 gradle application 插件创建一个简单的 HelloWorld 应用程序。当我使用以下设置运行它时,出现以下错误:

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

我的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"
}

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

package com.petarkolaric.helloworld

class Main {

    fun main(args : Array<String>) {
        println("Hello, World!")
    }
}

根据this blog post我应该可以这样使用应用程序插件。

当我运行 gradle run 时,我需要更改什么以允许 application 插件运行我的 main 函数?

最佳答案

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

1) 把main放到companion object中,做成JvmStatic

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

2) 将您的 class 更改为 object - 比您或多或少有一个单例 class 并使其成为 JvmStatic

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

3) 将main放在类外

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

关于gradle - 带有 Gradle 应用程序插件的 Kotlin 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47766179/

相关文章:

gradle - android.applicationVariants.size()始终返回0

java - 在 mavenCentral 中发布时如何从 pom 中删除依赖项

jvm - Java类加载可视化/分析工具

gradle - 通过 gradlew 使用 -Xmx 和 -Xms 运行应用程序

android - 在 Android 的导航架构组件中将复杂对象作为参数传递

Android Gradle 将包名称替换为 list 中的值

gradle - 在gradle Maven发布期间为lib添加前缀

java - JVM 是否有最坏的情况实现?

kotlin - 在浏览器中运行 Kotlin HTML Builder

mongodb - 如何使用 Micronaut 和 Kotlin + KMongo 为 MongoDB 配置对象映射?