Ошибка при создании zip файла с помощью refid

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

Задача:

<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}">
 </zipfileset></zipfileset></zip>
 <zip destfile="${deploy.dir}/myprogram_noother_${version}.zip" whenempty="fail" defaultexcludes="true">
 <zipfileset refid="zipfiles">
 </zipfileset></zip>
</zipfileset></zipfileset></zipfileset></zipfileset></zipfileset></zipfileset></zipfileset></target>

Когда задача выполняется:

create-zips:

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

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

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

1 ответ

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

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

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

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

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

licensed under cc by-sa 3.0 with attribution.