2011-11-17 22 views
5

que tienen un macrodef con un elemento llamado "libs"macrodefs de hormigas y elemento de nombrar

<macrodef name="deploy-libs"> 
    <element name="libs"/> 
    <sequential> 
     <copy todir="${glassfish.home}/glassfish/domains/domain1/lib">    
      <fileset dir="${lib}"> 
       <libs/> 
      </fileset> 
     </copy> 
    </sequential> 
</macrodef> 

que se invoca entonces como

<deploy-libs> 
    <libs> 
     <include name="mysql-connector-*.jar"/> 
     <include name="junit-*.jar" /> 
     <!-- .... --> 
    </libs> 
</deploy-libs> 

entonces tengo otra macrodef que llama a varios macrodefs incluyendo " deploy-libs ". Sería bueno si esto macrodef tenía un elemento "libs" también, pero:

<macrodef name="init-glassfish"> 
    <element name="libs"/> 
    <sequential> 

     <!-- other stuff --> 

     <deploy-libs> 
      <libs> 
       <libs/> 
      </libs> 
     </deploy-libs> 

     <!-- other stuff --> 

    </sequential> 
</macrodef> 

obviamente no funciona (debido a <libs><libs/></libs>):

Commons/ant-glassfish-server.xml:116: unsupported element include 

Una solución podría ser el nombre del elemento en " init-glassfish" de una manera diferente:

<macrodef name="init-glassfish"> 
    <element name="libraries"/> 
    <sequential> 

     <!-- other stuff --> 

     <deploy-libs> 
      <libs> 
       <libraries/> 
      </libs> 
     </deploy-libs> 

     <!-- other stuff --> 

    </sequential> 
</macrodef> 

¿hay una manera de tener el elemento a ser nombrado en la misma forma para ambos macrodefs?

Respuesta

0

he encontrado una solución a mi pregunta que resuelve el problema original usando un identificador de ruta

<macrodef name="deploy-libs"> 

    <attribute name="libraries-path-refid"/> 

    <sequential> 
     <copy todir="${glassfish.home}/glassfish/domains/domain1/lib">    
      <path refid="@{libraries-path-refid}"/> 
     </copy> 
    </sequential> 
</macrodef> 

Ahora bien, esto no resuelve el problema con los anidados etiquetas elementos, pero (problema XY) resuelve la cuestión práctica . Sería bueno saber si algo similar a la pregunta original es posible.

0

Aparentemente, la solución está envolviendo elementos adicionales <libs> en la llamada original, según la profundidad de anidación de las macros. Por supuesto, esto es una solución horrible, ya que requiere que la profundidad de anidamiento macro se conoce en la invocación, por ejemplo .:

<deploy-libs> 
    <libs> 
    <libs> 
     <include name="mysql-connector-*.jar"/> 
     <include name="junit-*.jar" /> 
     <!-- .... --> 
    </libs> 
    </libs> 
</deploy-libs> 

Ant bug 29153 abordar este problema se resolvió por desgracia, como inválida :(.

Cuestiones relacionadas