Обратный атрибут набора файлов / шаблона не расширяется. Как бы вы написали цель, которая работает на произвольном наборе файлов?
-
27-09-2019 - |
Вопрос
У меня есть набор целей, которые каждый делает по сути то же самое, за исключением каждого содержимого конкретного шаблон на котором выполнять свои задачи. Я хочу завершить эти цели в одну «многоразовую» цель, что вместо этого принимает набор файлов «в качестве параметра».
Например, это
<target name="echo1">
<foreach item="File" property="fn">
<in>
<items>
<include name="*.config"/>
</items>
</in>
<do>
<echo message="${fn}" />
</do>
</foreach>
</target>
<target name="echo2">
<foreach item="File" property="fn">
<in>
<items>
<include name="*.xml"/>
</items>
</in>
<do>
<echo message="${fn}" />
</do>
</foreach>
</target>
<target name="use">
<call target="echo1"/>
<call target="echo2"/>
</target>
будет заменен
<patternset id="configs">
<include name="*.config"/>
</patternset>
<patternset id="xmls">
<include name="*.xml"/>
</patternset>
<target name="echo">
<foreach item="File" property="fn">
<in>
<items>
<patternset refid="${sourcefiles}"/>
</items>
</in>
<do>
<echo message="${fn}" />
</do>
</foreach>
</target>
<target name="use">
<property name="sourcefiles" value="configs"/>
<call target="echo"/>
<property name="sourcefiles" value="xmls"/>
<call target="echo"/>
</target>
Тем не менее, оказывается, что refid
не расширяется как ответ в запись электронной почты NANT-DEV Поскольку шаблоны и салоны различаются от свойств. В этом неработовом коде, когда echo
называется, его patternset
Элемент ссылок на шаблон, буквально названный $ {sourcefiles} вместо того имена тестовое задание.
Как можно написать повторно использовать NANT Target, которая работает в различной набор файлов? Есть ли способ сделать это в NANT AS - не прибегая к написанию пользовательских задач?
Решение
Я наконец придумал это, что служит моим целям. Как бонус, это также демонстрирует динамически вызов цели.
<project
name="dynamic-fileset"
default="use"
xmlns="http://nant.sourceforge.net/release/0.86-beta1/nant.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<target name="configs">
<fileset id="files">
<include name="*.config"/>
</fileset>
</target>
<target name="xmls">
<fileset id="files">
<include name="*.xml"/>
</fileset>
</target>
<target name="echo">
<foreach item="File" property="fn">
<in>
<items refid="files"/>
</in>
<do>
<echo message="${fn}" />
</do>
</foreach>
</target>
<target name="use">
<property name="grouplist" value="xmls,configs"/>
<foreach item="String" in="${grouplist}" delim="," property="filegroup">
<do>
<call target="${filegroup}"/>
<call target="echo"/>
</do>
</foreach>
</target>
</project>
Другие советы
Я не уверен, что я полностью понял, что вы пытаетесь достичь, но не должны приписывать dynamic
из задача property
сделать работу?
<target name="filesettest">
<property name="sourcefiles" value="test" dynamic="true" />
<!-- ... -->
</target>