ant macrodef和元素命名

Mat*_*teo 5 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>
Run Code Online (Sandbox Code Playgroud)

然后调用为

<deploy-libs>
    <libs>
        <include name="mysql-connector-*.jar"/>
        <include name="junit-*.jar" />
        <!-- .... -->
    </libs>
</deploy-libs>
Run Code Online (Sandbox Code Playgroud)

然后我有另一个macrodef调用几个macrodef,包括"deploy-libs".如果这个macrodef也有一个元素"libs"会很好,但是:

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

        <!-- other stuff -->

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

        <!-- other stuff -->

    </sequential>
</macrodef>
Run Code Online (Sandbox Code Playgroud)

显然不起作用(因为<libs><libs/></libs>):

Commons/ant-glassfish-server.xml:116: unsupported element include
Run Code Online (Sandbox Code Playgroud)

解决方案可能是以不同的方式命名"init-glassfish"中的元素:

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

        <!-- other stuff -->

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

        <!-- other stuff -->

    </sequential>
</macrodef>
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*teo 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>
Run Code Online (Sandbox Code Playgroud)

现在这并没有解决嵌套元素标签的问题,但(XY问题)解决了实际问题。如果知道是否可能出现与原始问题类似的问题,那就太好了。