gpt4 book ai didi

java - Groovy:JLine不等待输入Gradle

转载 作者:行者123 更新时间:2023-12-03 05:46:39 25 4
gpt4 key购买 nike

操作系统:Windows 10,主要使用Cygwin。

我将DummyMain.groovy文件放在一起,如下所示:

@Grab(group='org.jline', module='jline', version='3.7.0')
class DummyMain {

static void main( args ) {
new DummyMain().go()
}

def go() {
def terminal = org.jline.terminal.TerminalBuilder.builder().jna( true ).system( true ).build()
terminal.enterRawMode()
def reader = terminal.reader()
int readInt = -1
while( readInt != 13 ) {
readInt = reader.read()
println "read |$readInt| class ${readInt.class.simpleName}"
println "reader class ${reader.class.simpleName}"
}
reader.close()
terminal.close()
}

}

当我通过将 groovy DummyMain放在其自己的目录中来运行此程序时,它可以按预期工作并让我感到高兴: reader.read()行在下一个字符处暂停,然后对其进行处理(即在用户按Enter键结束该行之前)。

但是当我注释掉 @Grab并将此行放入 build.gradle时:
compile 'org.jline:jline:3.7.0'

然后尝试使用最简单的 build.gradle来运行该文件,该文件将失败: while循环不断旋转,而无需等待用户输入,即不断地打印“read | -1 | ...”。

如果我使用Cygwin控制台或Windows CMD控制台执行 gradle run,则会发生这种等待失败的情况。

从另一条打印行中,我可以看出所有这三种情况下的读者都是 NonBlockingInputStreamReader类(即通过Cygwin进行Gradle,通过Windoze CMD进行Gradle或 groovy命令行命令)。

但是,我发现如果执行 gradle installDist,则该应用程序的结果“分布式”版本可以正常运行:响应输入的每个字符并等待下一个字符。为此感谢上帝!但是出于测试和开发目的,如果可以找到尝试与Gradle一起运行的问题的解决方案,那就太好了。似乎有一些测试可能会因此而失败,但如果不这样做,它们将失败。

回复tkruse

这是build.gradle。 DummyMain.groovy在src \ main \ groovy \ core下。
apply plugin: 'java-library'
apply plugin: 'groovy'
apply plugin: 'application'

mainClassName = "core.DummyMain"

repositories {
jcenter()
mavenCentral()
}

dependencies {
api 'org.apache.commons:commons-math3:3.6.1'
implementation 'com.google.guava:guava:21.0'
compile 'org.codehaus.groovy:groovy-all:2.6.0-alpha-2'
compile 'net.bytebuddy:byte-buddy:1.6.11'
compile 'org.jline:jline:3.7.0'
}

到目前为止,唯一答案的回答者是JLine的作者。我认为Gradle使用JLine的可能性很小,如果是这种情况,Guillaume Nodet会提到...

最佳答案

我想您已经注意到,在一种情况下,您指的是jline-terminal-jna,而在另一种情况下,您是指的jline。尽管jline jar包含jline-terminal-jna jar的内容,但是其依赖项略有不同,因为JNA库是jline-terminal-jna的强制性依赖项,但是是jline的可选性依赖项。

您应该检查JLine创建的Terminal实例的类,并验证这是预期的JnaWinSysTerminal类。

它也可能与前一阵子的JLine问题https://github.com/jline/jline3/issues/77有关。
但是,JLine没有什么要修复的,相关的gradle问题被拒绝并关闭(请参阅https://github.com/gradle/gradle/issues/1099)。

关于java - Groovy:JLine不等待输入Gradle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49864080/

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