Cuando define un punto de extensión en un archivo de compilación Ant puede tenerlo condicional utilizando el atributo if o unless. En un objetivo, si/a menos que impida que se ejecuten las tareas. Pero un punto de extensión no tiene ninguna tarea para ejecutar condicionalmente, entonces, ¿qué hace la condición? Mi pensamiento (que resultó ser incorrecto en Ant 1.8.0) es que evitaría que se ejecutaran tareas que extiendan el punto de extensión. Aquí está un ejemplo del script de creación mostrando el problema:¿Cuál es el uso de los atributos de punto de extensión de Ant si/al menos?
<project name = "ext-test"
default = "main">
<property name = "do.it" value = "false" />
<extension-point name = "init"/>
<extension-point name = "doit" depends = "init" if = "${do.it}" />
<target name = "extend-init" extensionOf = "init">
<echo message = "Doing extend-init." />
</target>
<target name = "extend-doit" extensionOf = "doit">
<echo message = "Do It! (${do.it})" />
</target>
<target name = "main" depends = "doit">
<echo message = "Doing main." />
</target>
</project>
Uso del mando:
ant -v
Relults en:
Apache Ant version 1.8.0 compiled on February 1 2010
Trying the default build file: build.xml
Buildfile: /Users/bob/build.xml
Detected Java version: 1.6 in: /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
Detected OS: Mac OS X
parsing buildfile /Users/bob/build.xml with URI = file:/Users/bob/build.xml
Project base dir set to: /Users/bob
parsing buildfile jar:file:/Users/bob/Documents/Development/3P-Tools/apache-ant-1.8.0/lib/ant.jar!/org/apache/tools/ant/antlib.xml with URI = jar:file:/Users/bob/Documents/Development/3P-Tools/apache-ant-1.8.0/lib/ant.jar!/org/apache/tools/ant/antlib.xml from a zip file
Build sequence for target(s) `main' is [extend-init, init, extend-doit, doit, main]
Complete build sequence is [extend-init, init, extend-doit, doit, main, ]
extend-init:
[echo] Doing extend-init.
init:
extend-doit:
[echo] Do It! (false)
doit:
Skipped because property 'false' not set.
main:
[echo] Doing main.
BUILD SUCCESSFUL
Total time: 0 seconds
usted notará que el objetivo es ejecutado extender-doit pero el el punto de extensión mismo se omite. Dado que un punto de extensión no tiene ninguna tarea, ¿qué se saltó exactamente? Cualquier objetivo que dependa del punto de extensión aún se ejecutará, ya que un objetivo omitido es un objetivo exitoso. ¿Cuál es el valor de los atributos if/unless en un punto de extensión?