我有一个带有一个名为"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以相同的方式命名元素?
我找到了我的问题的解决方案,它使用路径 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问题)解决了实际问题。如果知道是否可能出现与原始问题类似的问题,那就太好了。