ant macrodef和元素命名

时间:2011-11-17 11:08:41

标签: ant macrodef

我有一个带有一个名为" libs"

的元素的macrodef
<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调用几个macrodef,包括&#34; deploy-libs&#34;。如果这个macrodef有一个元素&#34; libs&#34;那将是很好的。但是:

<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

解决方案可以是在&#34; init-glassfish&#34;中命名元素。以不同的方式:

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

        <!-- other stuff -->

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

        <!-- other stuff -->

    </sequential>
</macrodef>

有没有办法让两个macrodef以相同的方式命名元素?

2 个答案:

答案 0 :(得分:0)

我找到了一个问题的解决方案,它使用路径ID

解决了原始问题
<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问题)解决了实际问题。如果能够找到与原始问题类似的东西,那将是一件好事。

答案 1 :(得分:0)

显然,解决方案是在原始调用中包含额外的<libs>元素,具体取决于宏的嵌套深度。当然这是一个可怕的解决方案,因为它要求在调用时知道宏嵌套深度,例如:

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

Ant bug 29153很遗憾地解决了这个问题无效 :(。