Как создать Ant TarTask для этой команды tar?

tar zcvf Test.tar.gz /var/trac/test /var/svn/test

Пока у меня есть:

<target name="archive" depends="init">
    <tar compression="gzip" destfile="test.tar.gz">
        <tarfileset dir="/">
            <include name="/var/trac/test" />
        </tarfileset>
        <tarfileset dir="/">
            <include name="/var/trac/svn" />
        </tarfileset>
    </tar>
</target>

При включенной отладке он всегда говорит «Источники не найдены», поэтому я немного озадачен тем, что делать дальше.


person Toxygene    schedule 05.09.2009    source источник


Ответы (1)


Здесь есть несколько вещей, которые могут пойти не так:

  1. Являются ли /var/trac/test и /var/svn/test файлами или каталогами? Настоящая tar прекрасно работает с обоими; ваша задача - как она сейчас написана - будет работать только с файлами, но не с папками.

  2. Есть ли у вас (точнее, у процесса Ant) адекватные разрешения?

  3. <include> элементы содержат шаблоны, которые обычно относительны к базовому реж. Вы указываете их как абсолютные.

Я бы переписал вышесказанное как:

<target name="archive" depends="init">
  <tar compression="gzip" destfile="test.tar.gz">
    <tarfileset dir="/var/trac" prefix="/var/trac">
      <include name="test/**" /> 
      <include name="svn/**" />
    </tarfileset>
  </tar>
</target>

prefix позволяет явно указать путь, с которого должны начинаться файлы в архиве Tar .

/** внутри <include> указывает Ant взять все файлы из этой папки и всех ее подпапок. Если /var/trac/test и /var/svn/test действительно являются файлами, а не папками, вы можете их опустить.

person ChssPly76    schedule 05.09.2009
comment
У меня было несколько ошибок в моей примерной задаче, но с небольшой доработкой (два набора tar-файлов, один для /var/svn/test и один для /var/trac/test) все сработало отлично. Благодаря тонну! - person Toxygene; 05.09.2009