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 |
Итак, проблема:)
Ответы
Ответ 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>