我有和应用程序有
fun main() {}
inside test/kotlin/com.company/LocalApplication.kt
我使用它在本地主机中运行,例如使用 IntelliJ,我只需单击运行该功能即可启动我的应用程序。
该函数在内部测试它为本地主机生成自定义参数配置,然后调用真正的 main/com.company/Application.kt
所以我想在build.gradle.kts中为Kotlin DSL gradle创建一个任务,当我在那个有趣的main((上手动单击运行时,它与Intellij完全相同
例如,在终端中执行以下操作:
gradle localhost
该命令在test/kotlin/com.company/LocalApplication.kt中调用有趣的main(( {},并使用localhost配置启动我的应用程序。
谢谢大家
让我们假设这个非常基本的应用程序App.kt
:
package com.company
class App {
val greeting: String
get() {
return "Hello world."
}
}
fun main(args: Array<String>) {
println(App().greeting)
}
您可以使用JavaExec
任务类型。
定义类型为JavaExec
的自定义任务:
tasks.register<JavaExec>("localhost") {
classpath = sourceSets.test.get().runtimeClasspath
main = "com.company.LocalApplication"
}
然后,您需要更新LocalApplication.kt
以使用@file:JvmName
:
@file:JvmName("LocalApplication")
package com.company
fun main(args: Array<String>) {
println(App().greeting)
}
然后在我的终端中运行任务会产生:
$ ./gradlew localhost
> Task :localhost
Hello world.
BUILD SUCCESSFUL in 4s
3 actionable tasks: 3 executed
JavaExec
任务还有更多选项,请阅读文档以获取更多信息。
- https://docs.gradle.org/current/dsl/org.gradle.api.tasks.JavaExec.html
- https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#handling-signature-clashes-with-jvmname
测试:
------------------------------------------------------------
Gradle 6.1.1
------------------------------------------------------------
Build time: 2020-01-24 22:30:24 UTC
Revision: a8c3750babb99d1894378073499d6716a1a1fa5d
Kotlin: 1.3.61
Groovy: 2.5.8
Ant: Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM: 11.0.6 (AdoptOpenJDK 11.0.6+10)
OS: Mac OS X 10.15.3 x86_64