Console application with Java and gradle

I am writing a console application with Java and gradle. I am using the application plugin and have the required fields correctly configured in build.gradle.

In my main class I have BufferedReader linked with System.in. Here's the problem: When I run gradle run in project directory, the reader does not wait for my console input. BufferedReader#readLine instead returns null on the very first call. This behavior is not desirable for what am I doing.

What is the solution? Is there a separate console application plugin for gradle or do I need to tweak application plugin somehow to suit my needs?


Solution 1:

Per default the system.in of your gradle build is not wired up with the system.in of the run (JavaExec) task. You can do the following:

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

// build.gradle.kts (Kotlin syntax)
tasks.named<JavaExec>("run") {
    standardInput = System.`in`
}

Solution 2:

As stated above, add

run {
   standardInput = System.in
}

And run:

gradle console:run -q --console=plain

where:

  • -q runs task in "quiet" mode (to avoid having > Building > :run)
  • --console=plain drops execution status: <=-> 80% EXECUTING [TIME]

Source: https://docs.gradle.org/current/userguide/gradle_command_line.html

Solution 3:

For build.gradle.kts:

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