59 votes

Utilisez Ant pour exécuter le programme avec des arguments de ligne de commande.

Mon programme reçoit des arguments en ligne de commande. Comment puis-je le passer quand j'utilise Ant?

78voto

emory Points 6319

L'extension de Richard Cook's réponse.

Voici l' ant de la tâche à exécuter n'importe quel programme (y compris, mais non limité à des programmes Java):

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

Voici la tâche à exécuter un programme Java à partir d'un .jar le fichier:

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

Vous pouvez invoquer soit à partir de la ligne de commande comme ceci:

ant -Darg0=Hello -Darg1=World run

Assurez-vous d'utiliser l' -Darg de la syntaxe; si vous avez exécuté ce:

ant run arg0 arg1

ensuite, ant serait d'essayer d'exécuter des cibles arg0 et arg1.

30voto

TeKa Points 1368

Si vous ne souhaitez pas gérer des propriétés distinctes pour chaque argument possible, je suggère que vous souhaitez utiliser:

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

Vous pouvez vérifier si la propriété n'est pas définie à l'aide d'une cible spécifique avec un unless de l'attribut et de l'intérieur de faire:

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

Mettre tous ensemble donne:

<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>

Vous pouvez l'utiliser comme suit:

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

Les deux premières commandes invite pour les arguments de ligne de commande, tandis que le second ne sera pas.

13voto

Mark O'Connor Points 33201

Le seul mécanisme efficace pour transmettre des paramètres dans une construction consiste à utiliser les propriétés Java:

 ant -Done=1 -Dtwo=2
 

L'exemple suivant montre comment vérifier et vérifier que les paramètres attendus ont été transmis au script.

 <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>
 

4voto

Richard Cook Points 10763

Pouvez-vous être un peu plus précis sur ce que vous essayez de faire et comment vous essayez de le faire?

Si vous essayez d'appeler le programme à l'aide de la tâche <exec> , vous pouvez effectuer les opérations suivantes:

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

0voto

Hugh Perkins Points 1050

Ce que j'ai fait en fin de compte, c'est de faire un fichier de commandes pour extraire le chemin de la fourmi fichier, puis exécuter java directement à l'aide de ceci:

Dans mon build.xml:

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

Dans un autre script appelé "run.sh':

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

Il n'est plus de la croix-plate-forme, mais au moins il est relativement facile à utiliser, et l'on pourrait en fournir un .fichier bat qui fait la même chose que le run.sh. C'est un très court script de commandes. Ce n'est pas comme la migration de l'ensemble de la construction à la plate-forme des fichiers de commandes spécifiques.

Je pense que c'est une honte, il n'y a pas une option dans ant par lequel vous pourriez faire quelque chose comme:

ant -- arg1 arg2 arg3

mpirun utilise ce type de syntaxe; ssh peut également utiliser cette syntaxe je pense.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X