gpt4 book ai didi

gradle - Kotlin 和 Gradle - 从 stdio 读取

转载 作者:IT老高 更新时间:2023-10-28 13:47:22 27 4
gpt4 key购买 nike

我正在尝试使用以下命令执行我的 Kotlin 类:

./gradlew -q run < src/main/kotlin/samples/input.txt

这是我的 HelloWorld.kt 类:

package samples

fun main(args: Array<String>) {

println("Hello, world!")

val lineRead = readLine()
println(lineRead)
}

这是我的 build.gradle.kts:

plugins {
kotlin("jvm")
application
}

application {
mainClassName = "samples.HelloWorldKt"
}

dependencies {
compile(kotlin("stdlib"))
}

repositories {
jcenter()
}

代码执行,但不显示 input.txt 文件中包含的数据。这是我得到的输出:

Hello, world!
null

我希望能够执行上面的 gradlew 命令,并将 input.txt 流重定向到 stdio。我可以在 C++ 中轻松做到这一点。一旦我编译了我的 .cpp 文件,我就可以运行:

./my_code < input.txt

它按预期执行。

如何使用 Kotlin 和 Gradle 实现相同的目标?

更新:基于this answer ,我尝试将其添加到 build.gradle.kts 但它不是有效的语法:

enter image description here

最佳答案

AjahnCharles 关于 run { standardInput = System.in } 的建议是正确的,但要将其移植到 kotlin-dsl,您需要使用不同的语法。run 在这种情况下是任务名称,您可以配置 application 插件的现有任务。要在 kotlin-dsl 中配置现有任务,您应该使用以下方式之一:

val run by tasks.getting(JavaExec::class) {
standardInput = System.`in`
}

val run: JavaExec by tasks
run.standardInput = System.`in`

即将发布的 Gradle 4.3 版本应提供 API for plugin writers读取用户输入。

Groovy 和 Kotlin 在这种情况下的区别是因为 Groovy 使用动态类型,但是在 Kotlin 中你必须指定任务类型才能自动完成并且只是为了编译配置脚本

关于gradle - Kotlin 和 Gradle - 从 stdio 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45747112/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com