Распространенная задача jar в скрипте ant build - PullRequest
1 голос
/ 28 октября 2009

У меня есть несколько проектов 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 объявляются в сценарии сборки каждого проекта. Кто-нибудь решил эту проблему раньше? Есть ли другой способ сделать то же самое?

1 Ответ

1 голос
/ 28 октября 2009

Это немного неудобно, но zipgroupfileset задачи jar может помочь.

Что-то подобное для ProjectA должно работать. Я угадал каталог, отрегулируйте соответствующим образом.

<fileset dir="${project.build.lib.dir}" id="extern.libs">
    <include name="externlib1.jar" />
    <include name="externlib2.jar" />
</fileset>

Затем в файле common.xml я переименовал ваш файл common-manifest.mf.

<target name="jar">
    <jar destfile="${project.target}" duplicate="preserve" manifest="common-manifest.mf">
        <zipgroupfileset refid="extern.libs"/>
    </jar>
</target>
...