2016-09-28 5 views
0

Глядя на чьем-то Maven Java проект в Eclipse, я заметил, что один из сохраненных конфигураций прогона имеет следующую команду Maven для запуска:Как вы можете напрямую выводить System.out на консоль в eclipse?

test -Dtest=fooTest -Dcom.awesomesite=System.out 

Когда я осмотрел файл fooTest.java, я заметил следующие утверждения:

public final static String BAR = "com.awesomesite"; 
.... 
this.whereToWrite = System.getProperty(BAR); 

Очевидно, что переменная экземпляра «whereToWrite» представляет, куда должны идти выходные данные. Поскольку я новичок в Java, я просто хочу понять, как прямой вывод System.out выводится на консоль.

+0

Где-то во внутренних элементах eclipse он должен установить 'System.out', чтобы указать на консольное представление. System.out - изменяемое статическое поле –

+0

@LanceJava - это фактически 'final'. Он будет установлен после отражения после запуска jvm, насколько я помню – SomeJavaGuy

+0

Отражение не требуется (и я не думаю, что вы можете установить последнее поле путем отражения), есть [setOut (...)] (https : //docs.oracle.com/javase/7/docs/api/java/lang/System.html#setOut%28java.io.PrintStream%29). Угадать конечное поле является оберткой, а делегат изменен. –

ответ

0

При запуске конфигурации запуска Eclipse запускает новый процесс для запуска с использованием Runtime.getRuntime().exec(...). Это возвращает объект Process, представляющий новый процесс.

Process имеет getInputStream() метод, который возвращает InputStream, подключенные к стандартному выходу процесса (который является, где System.out обычно пишет). Eclipse считывает из этого входного потока и выводит то, что он получает на консоли.

Eclipse также считывает поток ошибок процесса с использованием getErrorStream().

+0

Благодарим вас за ответ, который описывается при выполнении капота, о котором я раньше не знал. Я просматриваю конфигурацию eclipse и Runtime.getRunttime(). Exec (...). – DaeYoung

0

System.out подключен к экрану среды/пользователя. По умолчанию используется консоль.