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`
}