2009-07-27 10 views
23

コマンドを実装する必要があります:java -jar test.jar page.xml | mysql -u user -p base ant。だから私は、このタスクを試してみました:パイプでのAntの実行コマンド

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

しかし、私はパイプで例外エン持っています - 「|」 :あなたはアリからJavaプログラムを実行すると

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

はそう、それが問題だ:)

答えて

58

パイプ(|)は、シェルスクリプトでのみ使用できます。あなたはjavaプロセスへの引数として渡しています。

シェルスクリプトを実行する必要があります。あなたは実行することでこれを行うことができます(例えば)bash -cとシェル文として上記を渡す -

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

ありがとうございました。 –

+0

それは助けて、またはそれは動作しますか? –

+0

うわー、私はちょうどそれが動作すると思ったが、... 私は持っている: そのようなファイルやディレクトリがありません –

0

、アウトプログラムからの入力とは、Antのランタイムによって捕獲されている - あなたはそれらを試してみて、リダイレクトすることはできませんそのパイプを使用しています。

これを行うには、同じ問題が発生する可能性がありますが、execタスクのほうが良いかもしれません。

0

実際にはJavaコマンドを実行しています。

Execタスクhttp://ant.apache.org/manual/Tasks/exec.htmlを使用する必要がありますが、パイプコマンドを実行できるかどうかはわかりません。試してみる。

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> 

はちょうど私が共有するだろうと思いました。

+0

これは私のために働いた!受け入れられた答えはありませんでした。 – Dexter

関連する問題