2011-11-17 9 views
5

Mam macrodef z elementem zwanych "libs"ant macrodefs i elementem nazywania

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

który następnie przywoływanych jako

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

Mam następnie kolejną macrodef który wywołuje kilka macrodefs tym " deploy-libs ". Byłoby miło, gdyby to macrodef miał element "libs" zbyt ALE:

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

     <!-- other stuff --> 

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

     <!-- other stuff --> 

    </sequential> 
</macrodef> 

oczywiście nie działa (z powodu <libs><libs/></libs>):

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

Rozwiązaniem może być nazwać element " GlassFish startowe”w inny sposób:

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

     <!-- other stuff --> 

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

     <!-- other stuff --> 

    </sequential> 
</macrodef> 

Czy istnieje sposób mieć element być nazwany w ten sam sposób dla obu macrodefs?

Odpowiedz

0

znalazłem rozwiązania mojego problemu, który rozwiązuje pierwotnego problemu używając identyfikatora ścieżki

<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> 

Teraz to nie rozwiąże problemu z zagnieżdżonych elementów tagów ale (XY problem) rozwiązuje praktyczny problem . Byłoby miło wiedzieć, czy coś podobnego do pierwotnego pytania jest możliwe.

0

Wygląda na to, że rozwiązaniem jest zawijanie dodatkowych elementów <libs> wokół oryginalnego wywołania w zależności od głębokości zagnieżdżania makr. Oczywiście jest to straszne rozwiązanie, ponieważ wymaga, że ​​makro głębokość zagnieżdżenia jest znana na pw, np .:

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

Ant bug 29153 adresowania ten problem został rozwiązany niestety jak nieprawidłowej :(.