2010-09-16 27 views

Respuesta

68

Extendiendo Richard Cook 's respuesta.

Aquí está la ant tarea para ejecutar cualquier programa (incluyendo, pero no limitado a los programas de Java):

<target name="run"> 
    <exec executable="name-of-executable"> 
     <arg value="${arg0}"/> 
     <arg value="${arg1}"/> 
    </exec> 
</target> 

Aquí es la tarea a ejecutar un programa Java desde un archivo .jar:

<target name="run-java"> 
    <java jar="path for jar"> 
     <arg value="${arg0}"/> 
     <arg value="${arg1}"/> 
    </java> 
</target> 

Puede invocar desde la línea de comandos de esta manera:

ant -Darg0=Hello -Darg1=World run 

Asegúrese de utilizar la sintaxis -Darg; si ejecutó esto:

ant run arg0 arg1 

continuación ant trataría de ejecutar los objetivos arg0 y arg1.

+0

¿Es el "nombre-de-ejecutable" la ruta para jar? –

+3

La tarea ejecutiva (http://ant.apache.org/manual/Tasks/exec.html) ejecutará cualquier programa arbitrario. La tarea java (http://ant.apache.org/manual/Tasks/java.html) ejecutará un programa java. – emory

4

¿Puede ser un poco más específico sobre lo que está tratando de hacer y cómo está tratando de hacerlo?

Si usted está tratando de invocar el programa mediante la tarea <exec> puede hacer lo siguiente:

<exec executable="name-of-executable"> 
    <arg value="arg0"/> 
    <arg value="arg1"/> 
</exec> 
+1

Me gusta: ant run arg0 arg1 –

10

El único mecanismo eficaz para pasar parámetros a una acumulación es usar las propiedades de Java:

ant -Done=1 -Dtwo=2 

El siguiente ejemplo muestra cómo se puede verificar y asegurar los parámetros esperados se han pasado a la secuencia de comandos

<project name="check" default="build"> 

    <condition property="params.set"> 
     <and> 
      <isset property="one"/> 
      <isset property="two"/> 
     </and> 
    </condition> 

    <target name="check"> 
     <fail unless="params.set"> 
     Must specify the parameters: one, two 
     </fail> 
    </target> 

    <target name="build" depends="check"> 
     <echo> 
     one = ${one} 
     two = ${two} 
     </echo> 
    </target> 

</project> 
+0

Emory me ganó :-) –

+0

¿Cómo se ve xml cuando no sé cuántos argumentos tendré? –

+0

¿Qué pasa si el número de args no es constante? –

26

Si no desea manejar propiedades separadas para cada argumento posible, sugiero que tendría que utilizar:

<arg line="${args}"/> 

Puede comprobar si la propiedad no se ajusta con un objetivo específico con un atributo unless y en el interior hacer:

<input message="Type the desired command line arguments:" addProperty="args"/> 

Poniendo todo junto da:

<target name="run" depends="compile, input-runargs" description="run the project"> 
    <!-- You can use exec here, depending on your needs --> 
    <java classname="Main"> 
    <arg line="${args}"/> 
    </java> 
</target> 
<target name="input-runargs" unless="args" description="prompts for command line arguments if necessary"> 
    <input addProperty="args" message="Type the desired command line arguments:"/> 
</target> 

Usted puede utilizarlo de la siguiente :

ant 
ant run 
ant run -Dargs='--help' 

Los dos primeros comandos solicitarán los argumentos de la línea de comandos, mientras que el último ganó 't.

+0

Me gusta cómo propuso una solución sin los -Dargs – Sgene9

0

Lo que hice al final es hacer un archivo por lotes para extraer el CLASSPATH del archivo de hormigas, a continuación, ejecutar Java directamente utilizando la siguiente:

En mi build.xml:

<target name="printclasspath"> 
    <pathconvert property="classpathProp" refid="project.class.path"/> 
    <echo>${classpathProp}</echo> 
</target> 

En otro script llamado 'ejecutar.sh ':

export CLASSPATH=$(ant -q printclasspath | grep echo | cut -d \ -f 7):build 
java "[email protected]" 

Ya no es multiplataforma, pero al menos es relativamente fácil de usar, y se podría proporcionar un archivo .bat que hace lo mismo que el run.sh. Es un script por lotes muy corto. No es como migrar toda la construcción a archivos por lotes específicos de la plataforma.

creo que es una lástima que no hay alguna opción en la hormiga por el que usted podría hacer algo como:

ant -- arg1 arg2 arg3 

mpirun utiliza este tipo de sintaxis; ssh también puede usar esta sintaxis, creo.

Cuestiones relacionadas