2009-09-04 4 views
3

Je suis nouveau fourmi, et je veux exiger un nom de fichier si autre chose que la cible par défaut est utilisé, de sorte que la syntaxe d'appel serait quelque chose comme ceci:Comment demander un argument de ligne de commande pour Ant?

ant specifictarget -Dfile=myfile 

J'utilise le ant contrib package pour me donner des fonctionnalités supplémentaires, j'ai donc ceci:

<if> 
    <equals arg1="${file}" arg2="" /> 
    <then> 
     <!-- fail here --> 
    </then> 
</if> 

Ma pensée est que si le fichier n'a pas été spécifié, il est peut-être égale à la chaîne vide. Évidemment, cela n'a pas fonctionné, et je ne trouve aucun exemple sur google ou la bonne syntaxe dans le manuel.

Alors, quelle syntaxe dois-je utiliser?

Répondre

6

Vous n'avez pas vraiment besoin du paquet contrib. Ceci est plus commodément fait en utilisant des capacités de fourmi intégrées comme si/à moins et dépend. Voir ci-dessous:

<target name="check" unless="file" description="check that the file property is set" > 
    <fail message="set file property in the command line (e.g. -Dfile=someval)"/> 
</target> 

<target name="specifictarget" if="file" depends="check" description=" " > 
    <echo message="do something ${file}"/> 
</target> 
+3

Va écrire la même chose :-). Une version encore plus courte serait "" –

+0

+1 Merci, David et Matt. J'ai fini par utiliser la version courte. –

+0

Les gars, avez-vous strictement besoin d'ajouter l'attribut _if_ dans la seconde cible nommée _specifictarget_? – Victor

3

Vous avez la bonne idée. Le

ant specifictarget -Dfile=myfile 

définit les propriétés Ant à partir de la ligne de commande. Tout ce dont vous avez vraiment besoin est

<property name="file" value=""/> 

pour votre valeur par défaut. De cette façon, si le fichier n'est pas spécifié, il sera égal à la chaîne vide.

2

Puisque les propriétés ne sont pas mutable dans Ant, vous pouvez ajouter ceci:

<property name="file" value="" />

Cela définira la propriété file à une chaîne vide si elle n'a pas déjà été mis sur la ligne de commande. Ensuite, votre test d'égalité fonctionnera comme prévu.

1

Alternativement, vous pouvez utiliser l'échappement de la valeur car ant ne crache le texte que lorsqu'il ne peut pas effectuer de substitution de propriété.

 <if> 
     <equals arg1="${file}" arg2="$${file}" /> 
     <then> 
     <echo>BARF!</echo> 
     </then> 
    </if> 
Questions connexes