java - Kotlin dsl gradle,如何使用自定义任务调用和执行 .kt 内的函数
问题描述
我有和应用程序有
fun main() {}
在 test/kotlin/com.company/LocalApplication.kt 里面
我使用它在 localhost 中运行,例如使用 IntelliJ 我只需单击运行该功能即可启动我的应用程序。
里面的那个函数是什么测试它为localhost生成一个自定义的args配置,然后调用真正的main/com.company/Application.kt
所以我想在 build.gradle.kts 中为 kotlin dsl gradle 创建一个任务,它与 Intellij 在我手动单击那个有趣的 main() 上运行时所做的完全相同
例如在终端这样做:
gradle localhost
并且该命令调用 test/kotlin/com.company/LocalApplication.kt 中的 fun 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
推荐阅读
- python - 我无法安装新软件包/Python 要求我升级其新版本,但它也不起作用
- javascript - 从 ajax 错误处理中获取单独的字符串
- spring - 何时在应用程序上下文上使用可配置的应用程序上下文?
- package - 如何安排 Quicklisp 加载给定库的本地版本
- prolog - 蝙蝠与球谜题
- java - 房间抽象 Pojo
- ios - 静态表视图单元格中的动态表视图
- hibernate - 如何使用 Mockito 在 Hibernate 中模拟 entityManager.getTransaction().begin()?
- java - 在 SQLite 中使用 Between 不返回每周数据
- javascript - 如何获取在字符串中有查询的 url 的正确查询?