58

我正在用 Java 和 gradle 编写一个控制台应用程序。我正在使用该application插件,并且在build.gradle.

在我的主要课程中,我BufferedReaderSystem.in. 问题是:当我gradle run在项目目录中运行时,阅读器不会等待我的控制台输入。BufferedReader#readLine而是null在第一次调用时返回。这种行为对于我正在做的事情是不可取的。

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

4

4 回答 4

86

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

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

// build.gradle.kts (Kotlin syntax)
tasks.named<JavaExec>("run") {
    standardInput = System.`in`
}
于 2012-11-01T07:13:44.067 回答
29

如上所述,添加

run {
   standardInput = System.in
}

并运行:

gradle console:run -q --console=plain

在哪里:

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

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

于 2016-06-09T22:25:37.310 回答
3

对于build.gradle.kts

tasks.getByName<JavaExec>("run") {
    standardInput = System.`in`
}
于 2020-11-20T14:32:22.670 回答
-4

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

于 2012-11-01T06:48:29.130 回答