Ошибка создания zip-файла с помощью refid - PullRequest
1 голос
/ 28 февраля 2012

Я пытаюсь создать 2 zip-файла как часть задачи муравья. Оба похожи, но один включает в себя некоторые дополнительные данные. Поэтому для сокращения кода я бы хотел определить набор файлов и сослаться на него. Единственная проблема в том, что выдает ошибку.

Задача:

<target name="create-zips" depends="cleanup, compile, package-jar">

    <zipfileset id="zipfiles">
        <zipfileset dir="${ant.project.name}-dist" includes="${jarname}.jar" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram" filemode="755" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram_gui" filemode="755" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram_gui.command" filemode="755" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram.bat" filemode="755" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram_gui.bat" filemode="755" prefix="${title}"/>
        <zipfileset dir="${docs.dir}" includes="myprogram_readme.txt" prefix="${title}"/>
    </zipfileset>

    <zip destfile="${deploy.dir}/myprogram_${version}.zip" whenempty="fail" defaultexcludes="true">
         <zipfileset refid="zipfiles"/>
        <zipfileset dir="${otherdata.dir}" includes="other/*.*" prefix="${title}"/>
    </zip>
    <zip destfile="${deploy.dir}/myprogram_noother_${version}.zip" whenempty="fail" defaultexcludes="true">
        <zipfileset refid="zipfiles"/>
    </zip>
</target>

Когда задание запущено:

    create-zips:

BUILD FAILED
/path/to/my/buildfile/build-tools.xml:119: Problem opening /path/to/my/data/docs/myprogram_readme.txt

Я подтвердил, что файл существует. Удаление readme include просто приводит к возникновению ошибки в другом файле. Кроме того, если я просто скопирую и вставлю zipfileset в 2 отдельных тега, все будет отлично. Но я бы предпочел не делать этого.

edit: Apache Ant (TM) версия 1.8.2, скомпилированная 14 октября 2011 года, Mac OS X 10.7. Не пробовал ни на какой другой платформе.

1 Ответ

1 голос
/ 29 февраля 2012

Я однажды пытался сделать то же самое, но безрезультатно.A fileset не принимает вложенные fileset.Когда вы пытаетесь обмануть и использовать zipfileset в качестве внешнего набора, ant рассматривает его содержимое как zip-файлы.Когда ant пытается распаковать ваши файлы, вы получаете ошибку открытия .

A fileset должен иметь атрибут dir.Этот каталог должен быть родительским для всех компонентов набора файлов.Грустно, но факт.

Я попал в обход.Создать X наборов файлов.Эти наборы файлов могут быть указаны как вложенные элементы задачи zip.Если в конкретном случае вам нужно меньше, чем X, тогда задайте значение по умолчанию для всех наборов файлов X и всегда архивируйте все X.

<!-- define X empty filesets -->
<fileset dir="c:\temp\1" includes="asdfasdf.neverhappens" id="nullfileset" />
<fileset id="zipfileset2" refid="nullfileset" />
<fileset id="zipfileset3" refid="nullfileset" />

<!-- here go real sets -->
<zipfileset dir="${scripts.dir}" includes="myprogram" />

Будьте осторожны с наборами файлов ant.Они изменчивы.Я однажды написал «вопрос» об этом, но кто-то удалил егоОтлично, тихая работа, ребята из стека, "спасибо" за это.

EDIT1: В Linux можно попробовать dir="/" и использовать selector s , вложенные в fileset.Я был на Windows со своей проблемой, поэтому я не мог этого сделать.В Windows нет символа "/", и я собирал файлы с разных дисков.

...