Non, vous ne pouvez pas remplacer une propriété définie sur la ligne de commande. Du moins, ce n'est pas facile à faire. Le but de remplacer les propriétés sur la ligne de commande est de permettre aux utilisateurs de remplacer les valeurs par défaut afin de modifier la façon dont votre projet est construit. Par exemple :
<property file="${basedir}/build.properties"/>
<property name="javac.debug" value="no"/>
<target name="compile">
<javac destdir="${main.destdir}"
debug="${javac.debug}">
Par défaut, le code Java est compilé sans information de débogage. Peut-être que cela est fait pour rendre les fichiers jar plus petits, ou une interprétation plus rapide, ou peut-être pour rendre le code plus difficile à décompiler et à lire. Quelle que soit la raison, ce build ne mettra pas d'information de débogage dans les classfiles.
Cependant, les développeurs souhaitent disposer de ces informations de débogage et veulent donc pouvoir passer outre ce paramètre :
$ ant -Djavac.debug=true compile
Ou bien, ils peuvent créer un build.properties
et y mettre la valeur.
Ce type de problème survient lorsque vous n'utilisez pas Ant pour les constructions. Je connais plusieurs sites qui utilisent Ant scripts pour effectuer les déploiements. Je décourage généralement cela car Ant n'est pas vraiment fait pour ce genre de choses. Par exemple, Ant n'a pas de logique intégrée ou de boucles. Une fois qu'une propriété est définie, elle ne peut pas être modifiée. Ce sont de bonnes idées pour un langage de construction, mais une idée terrible pour un langage de programmation d'usage général.
De plus, les développeurs ne devraient pas faire des constructions pour l'assurance qualité ou la production. Celles-ci devraient être effectuées par un serveur de construction qui ne modifiera pas les valeurs par défaut.
Maintenant, comment détruire tout ce système bien pensé et causer un ravage absolu :
Vous pouvez utiliser le ant-contribue tâches dans votre projet. Cela vous permettra d'accéder à l'application Ant Contrib. var pour annuler les propriétés.
Téléchargez le fichier ant-contrib.jar (quelle que soit la dernière version), et mettez-le dans un répertoire de type lib
sous votre projet. Ensuite, vous pouvez faire ceci :
<project name="danger-will-robinson" default="package" basedir="."
xmlns:ac="http://ant-contrib.sourceforge.net">
<!-- Define the Ant-Contrib tasks -->
<taskdef=resource="net/sf/antcontrib/antlib.xml"
uri="http://ant-contrib.sourceforge.net">
<classpath>
<fileset dir="${basedir}/lib">
<include name="ant-contrib*.jar"/>
</fileset>
</classpath>
</taskdef>
<!-- Unset Property "foo", so you can use it -->
<ac:var name="foo" unset="true"/>
Notez que le <classpath>
pointe vers le bocal ant-contrib dans le répertoire ${basedir}/lib
répertoire. Si vous l'enregistrez dans votre dépôt de sources, cela permettra à tous ceux qui vérifient votre projet d'être en mesure d'effectuer la construction sans installer le jar ant-contrib sur leur système.
Notez que j'ai défini un "ac" Espace de noms XML Ainsi, les tâches de Ant-Contrib ne chevaucheront pas d'autres tâches éventuelles de tiers.