Консольное приложение с 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)?

Другие вопросы по тегам