¿Hay alguna forma de reasignar el valor de la tarea Ant property
? ¿O hay otra tarea disponible para ese propósito?¿Cómo sobrescribir la propiedad en Ant?
Respuesta
Dependiendo de cómo quiera utilizar la propiedad modificada, puede usar macrodef
s.
Por ejemplo, en lugar de escribir la siguiente:
<target name="foo">
<echo message="${my_property}"/>
</target>
y no ser capaz de llamar a ant foo
con otro mensaje, se podría escribir:
<macrodef name="myecho">
<attribute name="msg"/>
<sequential>
<echo message="@{msg}"/>
</sequential>
</macrodef>
<target name="foo">
<myecho msg="${my_property}"/>
<property name="my_property2" value="..."/>
<myecho msg="${my_property2}"/>
</target>
ant-contrib'sVariable
tarea puede hacer esto:
<property name="x" value="6"/>
<echo>${x}</echo> <!-- will print 6 -->
<var name="x" unset="true"/>
<property name="x" value="12"/>
<echo>${x}</echo> <!-- will print 12 -->
No se recomienda, sin embargo, puede conducir a efectos secundarios extraños si las partes de los scripts Ant asumen valores de las propiedades inmutables, y otras partes rompen esta suposición.
Las propiedades son inmutables en hormiga.
Usted podría estar interesado en ant-contrib 's var
task.
<var name="my_var" value="${my_property}" />
<echo>Addressed in the same way: ${my_var} and ${my_property}</echo>
Las propiedades son inmutables en ant. Pero esa no es una limitación tan terrible como pueda parecer. Hay toda una clase de lenguajes de programación donde (la mayoría) de las variables son constantes y aún así hacen cosas esto se llama "programación funcional".
Puede "cambiar" los valores utilizados por diferentes tareas derivando propiedades nuevas y modificadas de las anteriores o cambiando los parámetros al llamar tareas con las tareas subant
o antcall
. Si eres creativo, generalmente puedes encontrar una manera de resolver tu problema.
es muy útil si das un ejemplo y explicas más. –
No se puede cambiar el valor de una propiedad en Ant.
Si tiene algunas tareas Ant que desea ejecutar repetidamente pasando diferentes valores, recomiendo el macrodef
task ya que puede ejecutar la misma macro pasando repetidamente diferentes atributos.
Por ejemplo:
<macrodef name="copythings">
<attribute name="todir"/>
<sequential>
<copy todir="@{todir}">
<fileset dir="${src}">
<exclude name='**/*svn' />
</fileset>
</copy>
</sequential>
</macrodef>
<copythings todir="/path/to/target1"/>
<copythings todir="/path/to/target2"/>
Tenga en cuenta que ${property}
se utiliza para hacer referencia a propiedades y @{attribute}
se utiliza para hacer referencia a los atributos pasados a la tarea <macrodef>
.
Desde Ant 1.8, puede utilizar la tarea "local" para cambiar el valor de una propiedad dentro de un objetivo. Tenga en cuenta que esto NO cambia el valor de la propiedad global con el mismo nombre, pero es una forma de resolver algunos problemas.
Ver
En aras de la justicia, hay un truco que permite alterar las propiedades inmutables de hormigas sin ningún tipo de librerías adicionales (desde Java 6):
<scriptdef name="propertyreset" language="javascript"
description="Allows to assign @{property} new value">
<attribute name="name"/>
<attribute name="value"/>
project.setProperty(attributes.get("name"), attributes.get("value"));
</scriptdef>
Uso:
<property name="x" value="10"/>
<propertyreset name="x" value="11"/>
<echo>${x}</echo> <!-- will print 11 -->
Como han mencionado otros, esto debería ser utilizado con cuidado después de que todos los enfoques canónicos demostraron no encajar.
Aquí hay una muestra que usa local con el comando basename. Var-unset no funciona para mí.
<for param="db-patches">
<path>
<fileset dir="${undeployed-files}" includes="**/ddl*.zip"/>
</path>
<sequential>
<local name="inpfile" />
<basename property="inpfile" file="@{db-patches}" suffix=".zip" />
<!-- unzip the patch -->
<unzip src="${undeployed-files}/${inpfile}.zip"
dest="${unzipped-patches}/${inpfile}" />
<move file="${undeployed-files}/${inpfile}.zip" tofile="${deployed-files}/${inpfile}.zip"/>
</sequential> </for>
- 1. Sobrescribir propiedad usando Python
- 2. Reemplazar caracteres en la propiedad Ant
- 3. bucle sobre la propiedad en Ant
- 4. propiedad del nombre de la máquina ant
- 5. Ant: cómo fallar si la propiedad contiene una cierta cadena
- 6. Cómo comprobar si una propiedad tiene valor en Ant
- 7. ¿Cómo sobrescribir la funcionalidad window.open?
- 8. Ant var y ámbito de propiedad
- 9. MAYÚSCULAS, minúsculas, capitalizar una propiedad Ant
- 10. Cómo sobrescribir la salida estándar en C
- 11. EntityFramework cómo sobrescribir las propiedades
- 12. Cómo configurar una propiedad Ant solo si no está configurada
- 13. Establecer la propiedad de lo que maven.compile.classpath contiene SIN Ant
- 14. define la propiedad ant del entorno con el valor predeterminado
- 15. Cómo verificar la versión de Ant en el script Ant
- 16. ¿Cómo sobrescribir register_argc_argv en PHP?
- 17. Reemplazar propiedad en un archivo XML utilizando ANT
- 18. Cómo extraer una subcadena en Ant
- 19. ¿Cómo sobrescribir log4j.properties durante la prueba?
- 20. ¿Cómo puedo sobrescribir la plantilla @ Html.LabelFor?
- 21. Symfony2: ¿cómo sobrescribir la plantilla central?
- 22. python sobrescribir la línea anterior
- 23. sobrescribir la clase en un `Html.EditorFor`
- 24. ¿Cómo añado una cadena a una propiedad en hormiga?
- 25. Ant anticapa un objetivo que define una propiedad
- 26. CONSERVACIÓN DE Apache Ant valor de la propiedad en el archivo
- 27. Cómo sobrescribir una entidad en Symfony2 paquete
- 28. cómo sobrescribir datos en un archivo txt?
- 29. Cómo sobrescribir OnClick en Android Spinner?
- 30. ¿Cómo sobrescribir System.Resources.ResourceManager predeterminado en Resources.Designer.cs?
La tarea var es especialmente útil para las "variables locales", p. Ej. in para bucles (también una tarea del excelente ant-contrib). Un inconveniente, sin embargo, es que la tarea var no admite el atributo "ubicación". – akr