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

mis*_*tor 40 java console-application gradle

我正在用Java和gradle编写一个控制台应用程序.我正在使用该application插件并正确配置了必填字段build.gradle.

在我的主要课程中,我已经BufferedReader与之相关联System.in.这是问题所在:当我gradle run在项目目录中运行时,阅读器不会等待我的控制台输入.BufferedReader#readLine而是null在第一次通话时返回.对于我正在做的事情,这种行为是不可取的.

解决办法是什么?是否有一个单独的控制台应用程序插件用于gradle或我是否需要以application某种方式调整插件以满足我的需求?

Ren*_*hke 68

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

run{
    standardInput = System.in
}
Run Code Online (Sandbox Code Playgroud)

  • 遗憾的是现在还没有.我刚才提出了一个问题:http://issues.gradle.org/browse/GRADLE-1147你可以为它投票. (4认同)
  • 谢谢!这是一个很大的帮助.现在有没有办法避免在提示用户下一次输入时打印`> Building>:run`? (2认同)
  • 我尝试了同样的事情,但是如果我键入Gradle卡住,并且没有输入输出到命令行。难道我做错了什么? (2认同)
  • 使用 `--console=plain` 以便在请求输入后不会打印任何内容 (2认同)

loe*_*chg 13

如上所述,添加

run {
   standardInput = System.in
}
Run Code Online (Sandbox Code Playgroud)

并运行:

gradle console:run -q --console=plain
Run Code Online (Sandbox Code Playgroud)

哪里:

  • -q以"安静"模式运行任务(以避免> Building > :run)
  • --console=plain 删除执行状态: <=-> 80% EXECUTING [TIME]

资料来源:https://docs.gradle.org/current/userguide/gradle_command_line.html


dir*_*lik 5

为了build.gradle.kts

tasks.getByName<JavaExec>("run") {
    standardInput = System.`in`
}
Run Code Online (Sandbox Code Playgroud)