Ошибка создания zip-файла с помощью refid
Я пытаюсь создать 2 почтовых файла как часть задачи муравья. Оба похожи, но один включает в себя некоторые дополнительные данные. Поэтому для сокращения кода я бы хотел определить набор файлов и сослаться на него. Единственная проблема в том, что выдает ошибку.
Задача:
<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 отдельных тега, все будет отлично. Но я бы предпочел не делать этого.
редактирование: Apache Ant(TM) версия 1.8.2, скомпилированная 14 октября 2011 года, Mac OS X 10.7. Не пробовал ни на какой другой платформе.
1 ответ
Я однажды пытался сделать то же самое, но безрезультатно. fileset
не принимает вложенные fileset
, Когда вы пытаетесь обмануть и использовать zipfileset
в качестве внешнего набора ant рассматривает его содержимое в виде zip-файлов. Когда ant пытается разархивировать ваши файлы, вы получаете ошибку открытия.
fileset
должен иметь dir
приписывать. Этот каталог должен быть родительским для всех компонентов набора файлов. Грустно, но правда.
Я попал в обход. Создать X наборов файлов. Эти наборы файлов могут быть указаны как вложенные элементы zip
задача. Если в конкретном случае вам нужно меньше, чем X, тогда установите значение по умолчанию для всех наборов файлов X и zip всегда все 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" />
Будьте осторожны с наборами файлов муравьев. Они изменчивы. Я однажды написал "вопрос" об этом, но кто-то удалил его. Молодцы, тихая работа, ребята, спасибо за это.
EDIT1: на Linux можно попробовать dir="/"
и использовать selector
вложенный в fileset
, Я был на Windows со своей проблемой, поэтому я не мог этого сделать. В Windows нет символа "/", и я собирал файлы с разных дисков.