Не могу заставить Gradle использовать System.in
Этот вопрос объясняет, как использовать System.in
при запуске задачи для запуска определенного класса в проекте.
Но для меня в настоящее время это не работает: хотя я включил application
плагин и следующие строки в build.gradle
:
mainClassName = "misc.StreamsExp"
run{
standardInput = System.in
}
task stream( type: JavaExec, dependsOn: assemble ){
classpath sourceSets.main.runtimeClasspath
main = "misc.StreamsExp"
}
линия с readLine
в коде приложения ниже должна быть блокировка, но это не так:
BufferedReader br = new BufferedReader(new InputStreamReader( System.in ));
String enteredLine = "";
while( enteredLine == null || ! enteredLine.equals( "q" )){
System.out.println( "spuds");
enteredLine = br.readLine();
}
... вместо этого вещь вращается навсегда
мотыги
мотыги
мотыги
...
NB Я нахожусь на ОС Windows 10 с Java 8.91. Я пробовал и консоль Windows DOS и Cygwin.
NB2 То же самое происходит, когда я запускаю это stream
задача внутри Eclipse (плагин Gradle STS Eclipse)... но не тогда, когда я делаю Run as --> Java application
: тогда блокировка происходит, как и ожидалось.
1 ответ
Ха... один из тех, кто думает, что ты навсегда останешься в тупике и найдешь решение через 2 минуты после публикации в SO! Я оставлю это здесь для всех остальных...
Ответ должен поставить линию standardInput =
в задании, которое вы выполняете, вот так:
task stream( type: JavaExec, dependsOn: assemble ){
standardInput = System.in
classpath sourceSets.main.runtimeClasspath
main = "misc.StreamsExp"
}
Странно, но за подсказкой "spuds" в терминале Windows DOS
> Строительство 88% >: поток
... которая является известной "ошибкой", упомянутой в вопросе, на который я ссылался. В Cygwin такой ошибки не бывает.
CAVEAT: это работает в терминале Windows DOS и терминале Cygwin... это НЕ решает проблему при запуске на заказ stream
задание в Eclipse!