【问题标题】:proper way to run kotlin application from gradle task从 gradle 任务运行 kotlin 应用程序的正确方法
【发布时间】:2016-09-19 14:53:26
【问题描述】:

我有简单的脚本

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


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

这里是gradle 任务

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

但是当我尝试运行任务 gradle runExample 时出现错误

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

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

【问题讨论】:

标签: gradle kotlin


【解决方案1】:

感谢@JaysonMinard 提供的链接how to run compiled class file in Kotlin?main

@file:JvmName("Example")

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


fun main(args: Array<String>) {
    print("executable!")
}

还有那个task

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

成功了

【讨论】:

  • 有没有办法为带有android应用插件的应用获取runtimeClasspath?
  • 如何将参数传递给主函数?
【解决方案2】:

如果您使用 Kotlin 构建文件 build.gradle.kts,您需要这样做

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

configure<ApplicationPluginConvention> {
    mainClassName = "my.cool.App"
}

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

plugins {
    application
}

application {
    mainClassName = "my.cool.App"
}

详情见https://github.com/gradle/kotlin-dsl/blob/master/doc/getting-started/Configuring-Plugins.md

【讨论】:

    【解决方案3】:

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

    // example.kt
    package com.lapots.game.journey.ims.example
    
    fun main(args: Array<String>) {
        print("executable!")
    }
    

    将此添加到您的build.gradle

    // build.gradle
    apply plugin: "application"
    mainClassName = 'com.lapots.game.journey.ims.example.ExampleKt'
    

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

    ./gradlew run
    

    【讨论】:

    • 对于和我有同样愚蠢问题的人:应该是apply plugin: "application"(注意这里的:!)
    • 似乎冒号不在答案中。
    【解决方案4】:

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

    在你的example.kt

    @file:JvmName("Example")
    
    package your.organization.example
    
    fun main(string: Array<String>) {
        println("Yay! I'm running!")
    }
    

    然后在你的build.gradle.kts:

    plugins {
        kotlin("jvm") version "1.3.72"
        application
    }
    
    application {
        mainClassName = "your.organization.example.Example"
    }
    

    【讨论】:

    • 谢谢你的帖子,真的很有帮助:) 配置很好很干净:)
    【解决方案5】:

    对于build.gradle.kts 用户

    主文件:

    package com.foo.game.journey.ims.example
    
    
    fun main(args: Array<String>) {
        println("Hello, world!")
    }
    

    build.gradle.kts 文件:

    plugins {
        application
        kotlin("jvm") version "1.3.72" // <-- your kotlin version here
    }
    
    application {
        mainClassName = "com.lapots.game.journey.ims.example.ExampleKt"
    }
    
    ...
    

    并使用以下命令运行:

    ./gradlew run
    

    【讨论】:

      【解决方案6】:

      可以在不添加包名的情况下执行此操作。使用绿色播放图标运行您的应用程序,它应该在它运行的命令末尾显示主类名称。

      build.gradle 内添加类名和应用程序这样

      plugins {
          id 'org.jetbrains.kotlin.jvm' version '1.5.10'
          id 'application'
      }
      
      mainClassName = 'AppKt'
      ...
      

      现在您可以使用 ./gradlew run 并传递参数还添加 --args='foo --bar'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-11
        • 1970-01-01
        • 2022-12-10
        • 1970-01-01
        • 2020-02-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多