2009-07-27 130 views
23

我必须执行命令: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 | 

所以,这就是问题所在:)

回答

58

管道(|)只能在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> 
+0

谢谢你们,它有帮助! – 2009-07-27 10:29:01

+0

它有帮助,还是有用? – 2009-07-27 10:31:01

0

当您从蚂蚁,输入和输出本程序是由蚂蚁捕获运行Java程序 - 你不能尝试,将用户重定向在别处使用该管道。

如果你想这样做,你可能会更好的运气与exec任务,虽然这可能会遭受同样的问题。

1

另一种解决方案将java -jar test.jar page.xml | mysql -u user -p base包装成一个单独的脚本,并用简单的<exec>任务调用它。

7

我不知道这是否是以往任何时候都解决了,但我有我通过以下解决了类似的问题:

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

只是想我也有同感。