2009-07-27 21 views
23

Devo implementare il comando: java -jar test.jar page.xml | mysql -u user -p base in ant. Così ho provato con questo compito:Comando antistatico con tubi

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

Ma ho ottenuto un'eccezione con pipe - "|" :

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

Quindi, questo è il problema :)

risposta

58

La pipe (|) può essere utilizzata solo in uno script di shell. Lo stai passando come argomento al processo java.

Quindi è necessario eseguire uno script di shell. È possibile farlo eseguendo (diciamo) bash -c e passando sopra come una dichiarazione di shell (anche se linea - si potrebbe scrivere un file script separato ma sembra un po 'di un overhead qui)

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

Grazie ragazzi, aiuta! –

+0

Aiuta o funziona? –

+0

wow, ho solo pensato che funzionasse, ma non ... Ho: Nessun file o directory –

0

Quando si esegue un programma Java da Ant, l'ingresso e fuori dal programma vengono catturati dal runtime Ant - non si può cercare di reindirizzare altrove usando quella pipa.

Se si desidera fare ciò, si potrebbe avere migliore fortuna con l'attività exec, anche se potrebbe risentire dello stesso problema.

0

Qui si sta effettivamente eseguendo un comando java.

È necessario utilizzare l'attività di Exec http://ant.apache.org/manual/Tasks/exec.html ma non si è sicuri se è possibile eseguire anche i comandi inviati tramite pipe. Provaci.

1

Un'altra soluzione sarebbe quello di avvolgere il java -jar test.jar page.xml | mysql -u user -p base in uno script separato e chiamarlo con semplice attività <exec>.

7

Non so se questo è stato mai risolto, ma ho avuto un problema simile, che ho risolto utilizzando la seguente:

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

solo pensato che avrei condiviso.

+0

Questo ha funzionato per me! La risposta accettata non ha funzionato. – Dexter

Problemi correlati