Муравей: используйте включение и исключение вместе

Хорошо, кажется, что это должно быть очень просто. Я использую Apache Ant 1.8, и у меня есть цель, которая делает:

<delete file="output/program.tar.bz2"/>
<tar basedir="input" destfile="output/program.tar.bz2" compression="bzip2">
  <tarfileset dir="input">
    <include name="goodfolder1/**"/>
    <include name="goodfolder2/**"/>
    <exclude name="**/badfile"/>
    <exclude name="**/*.badext"/>
  </tarfileset>
</tar>

Я хочу, чтобы он создал .tar.bz2 из input/goodfolder1 и input/goodfolder2, исключая файлы с именем «badfile» и исключая файлы с расширением «.badext». Он дает мне .tar.bz2, но включает badfile и *.badext — кажется, что исключения игнорируются.

Порядок включения/исключения, похоже, не имеет значения. Я попытался обернуть включения/исключения в (документы говорят, что это неявно?), но это не имело никакого значения.

Я уверен, что я упустил что-то простое, поскольку в руководстве есть очень похожий пример, хотя и в несколько ином контексте.

РЕДАКТИРОВАТЬ: Похоже, это может быть связано с атрибутом dir="input": он добавляет все во «вход», а затем добавляет к этому все в tarfileset. Файлы, которые я хочу, дважды появляются в файле program.tar.bz2, а исключенные файлы появляются только один раз. Но dir является обязательным, и я не вижу, чем это отличается от примеров в руководстве.


person Ken    schedule 07.01.2011    source источник


Ответы (2)


Ах, <tarfileset> сама по себе была причиной моей проблемы.

Если я удалю это и поставлю включения/исключения непосредственно внутри <tar>, все будет работать нормально.

person Ken    schedule 07.01.2011

Я думаю, вам нужно будет использовать два элемента <tarfileset>. Элементы <include> и <exclude> предназначены только для файлов. Не для каталогов. Пример:

<tar basedir="input" destfile="output/program.tar.bz2" compression="bzip2"> <tarfileset dir="goodfolder1"> <exclude name="**/badfile"/> <exclude name="**/*.badext"/> </tarfileset> <tarfileset dir="goodfolder2"> <exclude name="**/badfile"/> <exclude name="**/*.badext"/> </tarfileset> </tar>

person Robert Greathouse    schedule 07.01.2011
comment
Шаблоны include и exclude можно использовать как для файлов, так и для папок. Возможно, вы думаете о includesfile и excludesfile. - person Mads Hansen; 08.01.2011