使用Java和gradle的控制台应用程序

使用Java和gradle的控制台应用程序,java,console-application,gradle,Java,Console Application,Gradle,我正在用Java和gradle编写一个控制台应用程序。我正在使用,并且在build.gradle中正确配置了所需字段 在我的主要课程中,我有BufferedReader链接到系统中。问题是:当我在项目目录中运行gradlerun时,读者不会等待我的控制台输入BufferedReader#readLine在第一次调用时返回null。这种行为不适合我正在做的事情 解决办法是什么?gradle是否有单独的控制台应用程序插件,或者我是否需要调整应用程序插件以满足我的需要?很可能,问题在于java代码。应

我正在用Java和gradle编写一个控制台应用程序。我正在使用,并且在
build.gradle
中正确配置了所需字段

在我的主要课程中,我有
BufferedReader
链接到
系统中。问题是:当我在项目目录中运行
gradlerun
时,读者不会等待我的控制台输入
BufferedReader#readLine
在第一次调用时返回
null
。这种行为不适合我正在做的事情


解决办法是什么?gradle是否有单独的控制台应用程序插件,或者我是否需要调整
应用程序
插件以满足我的需要?

很可能,问题在于java代码。应用程序插件所做的就是编译java代码,并运行您指定的主类。你能在你的主类中发布你为应用程序插件指定的代码吗(mainClassName)

默认情况下,gradle构建的system.in未与运行(JavaExec)任务的system.in连接。您可以执行以下操作:

// build.gradle (Groovy syntax)
run {
    standardInput = System.in
}

// build.gradle.kts (Kotlin syntax)
tasks.named<JavaExec>("run") {
    standardInput = System.`in`
}
//build.gradle(Groovy语法)
跑{
standardInput=System.in
}
//build.gradle.kts(Kotlin语法)
tasks.named(“run”){
标准输入=系统。`in`
}
如上所述,添加

run {
   standardInput = System.in
}
并运行:

gradle console:run -q --console=plain
其中:

  • -q
    在“安静”模式下运行任务(以避免生成:运行)
  • --console=plain
    删除执行状态:
    80%执行[时间]

来源:

对于
build.gradle.kts

tasks.getByName<JavaExec>("run") {
    standardInput = System.`in`
}
tasks.getByName(“运行”){
标准输入=系统。`in`
}

我也从IntelliJ IDEA内部运行了代码。(通过右键单击文件并选择
Run.main
)它在那里工作正常。谢谢!这帮了大忙。现在有没有一种方法可以避免打印
>Building>:在提示用户下一次输入时运行
。我刚才提出了一个问题:你可以投赞成票。再次感谢你。这也行。接受你的答案。:)我尝试了同样的方法,但是Gradle被卡住了,如果我打字,命令行就不会打印任何输入。我做错什么了吗?4年后,我有了一个理由!如果您正在运行Windows操作系统,我刚刚发现,通过从Cygwin终端运行任务,不会出现令人讨厌的“>构建…”内容。但我也发现,在中放置<代码>标准输入=系统。如果我把它放在一个特别定义的<代码>任务<代码>中,而不是在“代码< >运行< /COD> >内。我会认为这是Gradle的一个缺陷。相关的分级问题:当我想使用回车时,这个执行状态会损坏输出(它在每行上重复)。您知道如何在没有--console=plain的情况下禁用它,因为它还禁用回车处理吗