从gradle任务运行kotlin应用程序的正确方法

lap*_*ots 19 gradle kotlin

我有简单的脚本

package com.lapots.game.journey.ims.example


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

这是gradle任务

task runExample(type: JavaExec) {
    main ='com.lapots.game.journey.ims.example.Example'
    classpath = sourceSets.main.runtimeClasspath
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行任务时,gradle runExample我得到了错误

Error: Could not find or load main class com.lapots.game.journey.ims.example.Example

运行应用程序的正确方法是什么?

Hol*_*ndl 14

如果您使用的是 Kotlin 构建文件build.gradle.kts,则需要执行以下操作

apply {
    plugin("kotlin")
    plugin("application")
}    

configure<ApplicationPluginConvention> {
    mainClassName = "my.cool.App"
}
Run Code Online (Sandbox Code Playgroud)

如果您application使用plugins {}块来应用插件,则可以使其更简单:

plugins {
    application
}

application {
    mainClassName = "my.cool.App"
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅https://github.com/gradle/kotlin-dsl/blob/master/doc/getting-started/Configuring-Plugins.md


lap*_*ots 11

感谢链接如何在Kotlin中运行已编译的类文件?由@JaysonMinard提供main

@file:JvmName("Example")

package com.lapots.game.journey.ims.example


fun main(args: Array<String>) {
    print("executable!")
}
Run Code Online (Sandbox Code Playgroud)

然后 task

task runExample(type: JavaExec) {
    main = 'com.lapots.game.journey.ims.example.Example'
    classpath = sourceSets.main.runtimeClasspath
}
Run Code Online (Sandbox Code Playgroud)

做了伎俩


Sub*_*ash 11

您也可以gradle为此使用应用程序插件。

// example.kt
package com.lapots.game.journey.ims.example

fun main(args: Array<String>) {
    print("executable!")
}
Run Code Online (Sandbox Code Playgroud)

将此添加到您的 build.gradle

// build.gradle
apply plugin "application"
mainClassName = 'com.lapots.game.journey.ims.example.ExampleKt'
Run Code Online (Sandbox Code Playgroud)

然后如下运行您的应用程序。

./gradlew run
Run Code Online (Sandbox Code Playgroud)

  • 对于和我有同样愚蠢问题的人:它应该是“应用插件:“应用程序””(注意这里的“:”!) (2认同)

Luk*_*ner 6

对于build.gradle.kts用户

主文件:

package com.foo.game.journey.ims.example


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

build.gradle.kts 文件:

plugins {
    application
    kotlin("jvm") version "1.3.72" // <-- your kotlin version here
}

application {
    mainClassName = "com.lapots.game.journey.ims.example.ExampleKt"
}

...
Run Code Online (Sandbox Code Playgroud)

并使用以下命令运行:

./gradlew run
Run Code Online (Sandbox Code Playgroud)


小智 5

我从@lapots 的答案中找到了另一种方法。

在你的example.kt

@file:JvmName("Example")

package your.organization.example

fun main(string: Array<String>) {
    println("Yay! I'm running!")
}
Run Code Online (Sandbox Code Playgroud)

然后在你的build.gradle.kts

plugins {
    kotlin("jvm") version "1.3.72"
    application
}

application {
    mainClassName = "your.organization.example.Example"
}
Run Code Online (Sandbox Code Playgroud)