Я бы назвал макрос внутри элемента другого макроса. Давайте предположим, что у меня есть следующий макрос:ant nesting macro call
<macrodef name="jc">
<attribute name="name" />
<attribute name="destdir" />
<element name="fileset-list" optional="false" />
<sequential>
<jar destfile="@{destdir}${file.separator}@{name}.jar" update="false">
<fileset-list />
<manifest>
<attribute name="Manifest-Version" value="1.0" />
</manifest>
</jar>
</sequential>
</macrodef>
и другой макрос
<macrodef name="defaultfs" description="Defines the default fileset">
<attribute name="path" />
<sequential>
<fileset dir="${dir.build.classes}">
<include name="@{path}/**/*.class" />
</fileset>
<fileset dir="${src.ehs}">
<include name="@{path}/**/icons/**" />
<include name="@{path}/**/sounds/**" />
<include name="@{path}/**/*.gif" />
<include name="@{path}/**/*.png" />
<include name="@{path}/**/*.wav" />
<include name="@{path}/**/*.jpg" />
<include name="@{path}/**/*.properties" />
<include name="@{path}/**/*.xml" />
<include name="@{path}/**/jaxb.index" />
</fileset>
</sequential>
</macrodef>
Я использую эти макросы следующим образом:
<jc destdir="${dir.build.jar}" name="thejar">
<fileset-list>
<defaultfs path="org/path/inner" />
</fileset-list>
</jc>
Что я получаю следующее сообщение об ошибке:
jar doesn't support the nested "defaultfs" element.
Что не так?
Задача ANT «jar» не была написана для поддержки XML-элемента «defaultfs». Макросы в ANT - это нечто иное, они больше похожи на шаблоны. –
Вы правы, но мое требование - использовать jc более широким образом, и у меня есть jar, которые строятся с похожим набором файлов. Являются ли макросы оценены только один раз? – landal79
У меня есть аналогичный случай, когда я хочу использовать макрос внутри (неявного) элемента для макроса. Пока не выяснили, как - или если это возможно - получить внутренний макрос, который был оценен перед внешним макросом. Если вы можете найти ответ на этот вопрос, я определенно заинтересован! (И нет, объединение двух макросов не является ответом - я хочу, чтобы каждый из них действовал независимо, как если бы это была обычная задача Ant, без того, чтобы пользователи знали, что это макросы.) – keshlam