traduccion - ant turnos
¿Cómo puedo permitir que un archivo de propiedades Ant anule el valor establecido en otro? (3)
El problema inicial con su configuración es que usted ha invertido build.properties
y build-defaults.properties
.
Las propiedades Ant se establecen una vez y luego nunca se pueden anular. Es por eso que configurar cualquier propiedad en la línea de comando a través de un -Dproperty=value
siempre anulará todo lo que haya establecido en el archivo; la propiedad está establecida y entonces nada puede anularla.
Entonces, la forma en que quieres configurar esto es:
<property file="build.properties" description="local build configuration overrides"/>
<property file="project.properties" description="Project configuration properties"/>
<property file="build-defaults.properties" description="default build configuration."/>
De esta manera:
- Todo lo establecido en la línea de comandos tiene prioridad sobre build.properties
- Todo lo establecido en build.properties prevalece sobre otros valores
- etc. en la línea.
Tengo un archivo ant que hace lo siguiente:
<property file="project.properties" description="Project configuration properties"/>
<property file="build-defaults.properties" description="default build configuration."/>
<property file="build.properties" description="local build configuration overrides"/>
Quiero tener los valores predeterminados establecidos en build-defaults.properties (que está registrado en SCM), pero permitir que los desarrolladores anulen los valores en un build.properties local para que puedan trabajar con rutas locales.
El problema es que no parece estar funcionando; He configurado esto, he creado una anulación en build.properties, pero el valor de mi ruta sigue siendo el establecido en build-defaults.properties. ¿Cómo logro esto?
En realidad, las propiedades de las hormigas pueden ser anuladas . Ver la documentación de la tarea de propiedad :
Normalmente, los valores de propiedad no se pueden cambiar, una vez que se establece una propiedad, la mayoría de las tareas no permitirán que se modifique su valor.
Una de las tareas que pueden anular el valor de la propiedad es la script
. También cualquier tarea personalizada puede usar esta puerta trasera. Otras propuestas están en cuestión. Ant loadfile override property . Esto va en contra del espíritu de la hormiga y generalmente es innecesario. Pero es bueno saber eso, porque simplemente tuve un problema opuesto: por qué el valor de la propiedad cambió aunque es inmutable .
Aquí hay un objetivo de muestra que usa la tarea de script para cambiar el valor de una propiedad. Muestra los métodos básicos para trabajar con propiedades. Todos los métodos se describen en Ant Api, que no está disponible en línea. Necesitas descargar el manual de hormigas . En su directorio api
está la documentación api.
<target name="t1">
<property name="a" value="one" />
<script language="javascript">
sProp = project.getProperty("a");
sProp = sProp.replace("e", "ly");
project.setProperty("a", sProp);
project.setNewProperty("a", "new value");
</script>
<property name="a" value="two" />
<echo>a=${a}</echo>
</target>
¿Cómo configurar fácilmente la tarea de script
? Hacer que la tarea de script se ejecute con el lenguaje beanshell
es un poco complicado y no trivial, pero se explica en esta respuesta . Sin embargo, como señaló Rebse , el uso de lenguaje javascript
se admite de fábrica en jdk 6.
La propiedad Ant no se puede sobrescribir a menos que se use macro y javascript para hacer:
Paso 1: define una función de macro para sobrescribir la propiedad
<!--overwrite property''s value-->
<macrodef name="set" >
<attribute name="name"/>
<attribute name="value"/>
<sequential>
<script language="javascript">
<![CDATA[
project.setProperty("@{name}", "@{value}");
]]>
</script>
</sequential>
</macrodef>
Paso 2: usa la macro en la hormiga xml
<set
name="your_target_property"
value="your_value" or "${another_property}"
</set>