我一定要执行的命令: java -jar test.jar page.xml | mysql -u user -p base
java -jar test.jar page.xml | mysql -u user -p base
在蚂蚁。 所以,我试图完成这个任务:
<java jar="test.jar" fork="true">
<arg line="page.xml | mysql -u user -p base"/>
</java>
但是,我有一间带管例外 - “|” :
java.lang.IllegalArgumentException: Input already set; can't set to |
所以,这就是问题所在:)
管道(|)只能在shell脚本中使用。 你把它当作参数传递给Java进程。
所以,你需要执行一个shell脚本。 你可以通过执行(比如说)做这个bash -c
并通过上述的壳声明(尽管在线 -你可以写一个单独的脚本文件,但在这里,似乎有点开销)
<exec executable="bash">
<arg value="-c"/>
<arg value="java -jar test.jar page.xml | mysql -u user -p base"/>
</exec>
我不知道这是否是以往任何时候都解决了,但我有我通过以下解决了类似的问题:
<exec executable="bash">
<arg value="-c"/>
<arg line='"java -jar test.jar page.xml | mysql -u user -p base"'/>
</exec>
只要想到我也有同感。
另一种解决方案是包裹java -jar test.jar page.xml | mysql -u user -p base
java -jar test.jar page.xml | mysql -u user -p base
到一个单独的脚本和用简单的称之为<exec>
任务。
当您从蚂蚁,从程序的输入和退出Java程序由蚂蚁运行时被捕获的 - 你不能尝试和其他地方使用管道重定向他们。
如果你想这样做,你可能有更好的运气exec
任务,虽然可能从有同样的问题。
在那里,你实际上是运行Java命令。
您需要使用Exec的任务http://ant.apache.org/manual/Tasks/exec.html ,但不知道是否有你也可以运行管道命令或没有。 试试看。
在解释为什么Amilie的答案是正确的解决方案:
相比于脑阿格纽的解决方案Amilie的正确解决方案之间的区别是它们之间的细微差别。 布赖恩有第二ARG为“值”,而Amilie使用“线”。
这也是为什么Amilie的是正确的,每Apache Ant的文档 :
“值|单个命令行参数;可以包含空格字符。”
“行|的命令行参数用空格隔开的列表。”
<exec executable="bash"> <arg value="-c"/> <arg line='"java -jar test.jar page.xml | mysql -u user -p base"'/> </exec>