Gradle的标准输入默认并不与系统标准输入绑定,需手动设置

参考: https://stackoverflow.com/questions/13172137/console-application-with-java-and-gradle

问题

在Gradle构建的控制台程序中,标准输入readLine总是返回null

原因

Gradle的标准输入默认并不与系统标准输入绑定,需手动设置

解决方法

在build.gradle.kts中添加

tasks.named<JavaExec>("run") {
    standardInput = System.`in`
}

如果需要更干净的输出,可以用

gradle console:run -q –console=plain

解决方法(Groovy)

在build.gradle中添加

run {
    standardInput = System.in
}

补充:在 IDEA 开发环境里使用 jline 无法正常工作的问题处理

现象:在 IDEA 中开发应用,使用 jline 捕获控制台输入时,无法正常运行,主要体现在如下代码在输入回车后无法执行:

ConsoleReader reader = new ConsoleReader();

reader.readLine(“> “);

解决的办法:

在使用 jline 之前,执行如下代码即可:

jline.TerminalFactory.registerFlavor(TerminalFactory.Flavor.WINDOWS, jline.UnsupportedTerminal.class);

也可以在程序启动的命令行里增加参数

-Djline.terminal=jline.UnsupportedTerminal

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。