Ant зависает при запуске Java-класса, который читает из std в - PullRequest
2 голосов
/ 19 февраля 2011

У меня есть класс java, который читает из std in. Когда я запускаю этот класс из ant с помощью задачи java, ANT просто зависает и не отображает мою подсказку для ввода, а также не принимает ввод из командной строки. Это просто висит там. Если я запускаю тот же класс с помощью сценария оболочки, он работает.

Кто-нибудь знает, почему АНТ это делает? Я попытался установить fork (в задаче Java) на true и false. Ни один из них не работал.

Ответы [ 3 ]

1 голос
/ 19 февраля 2011

Ant выполняет некоторые перехваты System.in и System.out (посмотрите, что происходит, когда вы выполняете System.out.println () из пользовательской задачи), но вы можете выполнить то, что вам нужно, работая с Input задача

http://ant.apache.org/manual/Tasks/input.html

Например, у вас может быть задание AccountSettings со следующим кодом

public class AccountSettings extends Task {
  private String guid;
  public AccountSettings() {
    super();
    guid = null;
  }

  public void execute() throws BuildException {
    if(guid != null) {
      //Do something with guid
    } else {
      throw new BuildException("guid not defined!");
    }
  }

  public void setGuid(String value) {
    guid = value;
  }
}

И затем установить значение "guid" через задачу ввода со следующим битом xml

<taskdef name="settings" classname="AccountSettings"/>
<input message="Enter an account guid" addproperty="ACCOUNT.GUID"/>
<settings guid="${ACCOUNT.GUID}"/>
0 голосов
/ 19 февраля 2011

Если (как говорит @Jason Sperske) Ant перехватывает (заменяет) потоки System. *, То другой альтернативой является изменение вашего класса Java для использования класса java.io.Console для чтения и записи в приставка. Однако обратите внимание, что это позволяет обойти любое перенаправление стандартных потоков, которое (например) вы можете выполнять при запуске Ant из командной оболочки.

0 голосов
/ 19 февраля 2011

Можете ли вы поделиться своим кодом, потому что я только что попробовал этот пример , используя этот простой build.xml , и он работал для меня:

<project default="run">
<target name="run">
<java classpath="." classname="ReadString"/>
</target>
</project>

Вывод был ужасный, но он работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...