2011-11-17 6 views
5

मैं एक एक तत्व कहा जाता है "libs"चींटी macrodefs और तत्व नामकरण

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

जो तब के रूप में

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

मैं फिर एक और macrodef जो सहित कई macrodefs "कहता है शुरू हो जाती है के साथ एक macrodef है तैनात-libs "। यह अच्छा होगा अगर इस macrodef था एक तत्व "libs" बहुत लेकिन होगा:

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

     <!-- other stuff --> 

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

     <!-- other stuff --> 

    </sequential> 
</macrodef> 

स्पष्ट रूप से (<libs><libs/></libs> की वजह से) काम नहीं कर रहा है:

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

एक समाधान में तत्व नाम के लिए हो सकता है " init-glassfish "एक अलग तरीके से:

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

     <!-- other stuff --> 

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

     <!-- other stuff --> 

    </sequential> 
</macrodef> 

वहाँ तत्व दोनों macrodefs के लिए उसी तरह से नामित किया जाना है के लिए एक रास्ता है?

उत्तर

0

मैं जो एक पथ आईडी

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

का उपयोग कर अब इस नेस्टेड तत्वों टैग के साथ इस मुद्दे को हल नहीं करता है लेकिन (XY समस्या) व्यावहारिक मुद्दे को हल करती है मूल समस्या का हल मेरे सवाल का समाधान मिल गया । यह जानना अच्छा होगा कि मूल प्रश्न के समान कुछ संभव है या नहीं।

0

जाहिर है, समाधान मैक्रोज़ घोंसला कितना गहराई के आधार पर मूल कॉल में अतिरिक्त <libs> तत्वों को लपेट रहा है। बेशक यह एक भयानक समाधान है, क्योंकि यह आवश्यक है कि मैक्रो नेस्टिंग गहराई मंगलाचरण पर, उदा .:

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

Ant bug 29153 को संबोधित कर इस समस्या को दुर्भाग्य के रूप में अमान्य :(हल किया गया था।

में जाना जाता है