2010-03-16 5 views
6

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?

Respuesta

0

Supongo que no hay un uso real para ellos, probablemente aparezcan como atributos porque el punto de extensión se extiende al objetivo (las clases java asociadas lo hacen).

Cuestiones relacionadas