У меня есть несколько проектов ant, которые создают плагины, которые соответствуют одному API. Плагины включают сторонние библиотеки, от которых они зависят, чтобы они были автономными. Поскольку большая часть поведения отдельных сценариев сборки была схожей, я решил выделить общие части в общий сценарий сборки.
Оригинальные скрипты сборки выглядели примерно так:
ProjectA / build.xml:
<project name="ProjectA" basedir=".">
...
<target name="jar">
<jar destfile="${project.target}" manifest="manifest.mf">
<fileset dir="${project.build.bin.dir}" />
<zipfileset src="externlib1.jar" />
<zipfileset src="externlib2.jar" />
</jar>
</target>
...
</project>
ProjectB / build.xml:
<project name="ProjectB" basedir=".">
...
<target name="jar">
<jar destfile="${project.target}" manifest="manifest.mf">
<fileset dir="${project.build.bin.dir}" />
<zipfileset src="externlib2.jar" />
<zipfileset src="externlib3.jar" />
</jar>
</target>
...
</project>
Вот как выглядят мои скрипты сборки после рефакторинга:
Common.xml:
<project name="Common" basedir=".">
...
<target name="jar">
<jar destfile="${project.target}" manifest="common-manifest.mf">
<fileset dir="${project.build.bin.dir}" />
<zipfileset refid="extern.libs" />
</jar>
</target>
...
</project>
ProjectA / build.xml:
<project name="ProjectA" basedir=".">
...
<zipfileset id="extern.libs">
<file file="externlib1.jar" />
<file file="externlib2.jar" />
</zipfileset>
...
<import file="../common.xml" />
</project>
ProjectB / build.xml:
<project name="ProjectB" basedir=".">
...
<zipfileset id="extern.libs">
<file file="externlib2.jar" />
<file file="externlib3.jar" />
</zipfileset>
...
<import file="../common.xml" />
</project>
Однако измененная сборка не работает - я считаю, что проблема в том, что я не могу объявить набор zipfileset, содержащий несколько файлов.
Я не могу найти способ, которым я могу объявить набор файлов так, чтобы поведение с общей задачей jar было таким же, как поведение, когда задачи jar объявляются в сценарии сборки каждого проекта. Кто-нибудь решил эту проблему раньше? Есть ли другой способ сделать то же самое?