Муравей: используйте включить и исключить вместе - PullRequest
1 голос
/ 07 января 2011

ОК, похоже, все должно быть просто. Я использую 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 - исключения, похоже, игнорируются.

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

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

EDIT: похоже, это может быть связано с атрибутом dir="input": он добавляет все в «input», а затем добавляет в него все в tarfileset. Файлы, которые я хочу, появляются в файле program.tar.bz2 дважды, но исключаемые файлы появляются только один раз. Но dir является обязательным, и я не вижу, чем это отличается от примеров в руководстве.

Ответы [ 2 ]

2 голосов
/ 07 января 2011

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

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

0 голосов
/ 07 января 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>

...