Подтвердить что ты не робот

Ant выполнить команду с трубками

Я должен выполнить команду: java -jar test.jar page.xml | mysql -u user -p base в ant. Поэтому я попытался с этой задачей:

<java jar="test.jar" fork="true">
  <arg line="page.xml | mysql -u user -p base"/>
</java>

Но у меня есть исключение с pipe - "|"

 java.lang.IllegalArgumentException: Input already set; can't set to |

Итак, проблема:)

4b9b3361

Ответ 1

Труба (|) может использоваться только в оболочке script. Вы передаете его как аргумент в java-процесс.

Итак, вам нужно выполнить оболочку script. Вы можете сделать это, выполнив (скажем) bash -c и передав вышеуказанное в качестве инструкции оболочки (хотя внутри - вы можете написать отдельный файл script, но здесь это немного накладные расходы)

  <exec executable="bash">
    <arg value="-c"/>
    <arg value="java -jar test.jar page.xml | mysql -u user -p base"/>
  </exec>

Ответ 2

Я не знаю, было ли это когда-либо разрешено, но у меня была аналогичная проблема, которую я решил, используя следующее:

<exec executable="bash">
    <arg value="-c"/>
    <arg line='"java -jar test.jar page.xml | mysql -u user -p base"'/>
</exec>

Просто подумал, что я поделюсь.

Ответ 3

Другим решением будет обернуть java -jar test.jar page.xml | mysql -u user -p base в отдельный script и вызвать его с простой задачей <exec>.

Ответ 4

Когда вы запускаете java-программу из Ant, вход и выход из программы захватываются средой Ant - вы не можете попробовать и перенаправить их в другом месте, используя этот канал.

Если вы хотите это сделать, вам может быть повезло с задачей exec, хотя это может привести к одной и той же проблеме.

Ответ 5

Там вы действительно используете java-команду.

Вам нужно использовать задачу Exec http://ant.apache.org/manual/Tasks/exec.html, но не уверен, что вы также можете запускать команды с каналами или нет. Попробуйте.

Ответ 6

Объясняя, почему ответ Амили является правильным решением:

Разница между правильным решением Amilie и решением Brain Agnew - тонкая разница между ними. У Брайана был второй аргумент как "значение", в то время как Амили использует "строку".

Вот почему Амили верна, согласно документации Apache Ant:

  • msgstr "значение | один аргумент командной строки; может содержать пробелы."

  • msgstr "строка | список аргументов командной строки, разделенных пробелами."

<exec executable="bash">
    <arg value="-c"/>
    <arg line='"java -jar test.jar page.xml | mysql -u user -p base"'/>
</exec>