Консольное приложение с Java и Gradle
Я пишу консольное приложение с Java и Gradle. Я использую application
плагин и имеют необходимые поля, правильно настроенные в build.gradle
,
В моем основном классе у меня есть BufferedReader
связан с System.in
, Вот проблема: когда я бегу gradle run
в каталоге проекта, читатель не ждет ввода моей консоли. BufferedReader#readLine
вместо этого возвращает null
на самом первом звонке. Такое поведение не желательно для того, что я делаю.
Каково решение? Есть ли отдельный плагин для консольного приложения для gradle или мне нужно настроить application
плагин как-то для удовлетворения моих потребностей?
3 ответа
По умолчанию system.in вашей сборки gradle не связан с system.in задачи run (JavaExec). Вы можете сделать следующее:
run{
standardInput = System.in
}
Как указано выше, добавить
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
За
build.gradle.kts
:
tasks.getByName<JavaExec>("run") {
standardInput = System.`in`
}
Скорее всего, проблема заключается в вашем коде Java. Все, что делает плагин приложения, это компилирует код Java и запускает указанный вами основной класс. Можете ли вы опубликовать код в своем основном классе, который вы указали для плагина приложения (mainClassName)?