Ant: Создать tar без информации о пути? - PullRequest
2 голосов
/ 16 июля 2010

Обновление : Я использую Ant 1.8.1 в Windows XP.

Я пытаюсь написать главный файл сборки Ant для нескольких проектов.Я могу успешно создать jar для каждого проекта и хочу упаковать все эти jar в один файл tar.gz.Каждый файл JAR находится в подкаталоге bin соответствующего проекта, но этот путь может быть изменен в будущем.Я пробовал что-то вроде этого:

<tar destfile="foo.tar.gz" compression="gzip" >
   <tarfileset dir=".">
      <include name="**/*.jar" />
   </tarfileset>
</tar>

... какой вид работает.Единственная проблема заключается в том, что он поддерживает структуру каталогов в банке.Я хочу плоский файл.Поэтому вместо:

foo.tar.gz
   project1
      bin
         project1.jar
   project2
      bin
         project2.jar
etc...

мне нужно:

foo.tar.gz
   project1.jar
   project2.jar

Я попытался использовать задачу копирования Ant, чтобы скопировать эти файлы jar во временную директорию, а затем скопировать их оттуда.Однако операция копирования реплицирует пути в целевом каталоге.Итак, та же проблема.

Ответы [ 3 ]

1 голос
/ 16 июля 2010

Я думаю, что вы почти у цели, собрав плоский каталог ваших файлов.Осталось избавиться от элемента tarfileset, который предназначен специально для сохранения / вставки структуры.Я думаю, что tar и zip задачи отлично работают со встроенными fileset элементами.

Документация подтверждает это - до 1.7 fileset был встроенный элемент ресурса, который можно было использовать на местеиз tarfileset.

Если подумать, думаю, что после перехода на fileset вам больше не нужно временно копировать файлы для выравнивания.


РЕДАКТИРОВАТЬ:

Я только что собрал и запустил этот файл сборки:

<project name="tartest" default="teer">
   <target name="teer">
      <tar destfile="tartest.tar">
     <fileset dir="../Downloads" includes="*.ico *.gif"/>
      </tar>
   </target>
</project>

и в архиве не было никаких следов исходного каталога:

-rw-r--r-- 0/0            3487 2009-12-28 20:04 actor075_thumb.gif
-rw-r--r-- 0/0            1456 2010-06-16 10:57 bea-logo.gif
-rw-r--r-- 0/0           23800 2010-06-16 09:22 ejb1.gif
-rw-r--r-- 0/0            1406 2010-05-15 10:40 favicon-beta.ico
-rw-r--r-- 0/0            1406 2010-05-15 10:25 favicon-clown.ico
-rw-r--r-- 0/0            1406 2008-12-06 01:08 favicon.ico

Кроме того, tar -xvf tartest.tar выгрузил tarred файлы в моем текущем каталоге.

Итак ... что вы делаете по-другому, что приводит к другим результатам для вас?


РЕДАКТИРОВАТЬ 2:

Более глубокое понимание, полученное при повторном чтении вашего вопроса.Я полностью обошел проблему с исходными путями, генерируемыми **/* подстановочными знаками.

Поскольку вы уже рассматриваете возможность копирования этих файлов JAR во временный каталог, все, чего не хватает, - это использовать атрибут flatten наcopy задача.Это должно исправить тебя.

0 голосов
/ 16 июля 2010

Возможно, вы захотите взглянуть на муравьиные flattenmapper.

0 голосов
/ 16 июля 2010

Возможно, вы сможете работать с zipFileSet , чтобы выполнить это. Позволяет контролировать общую структуру, предоставляя собственный префикс (или без префикса).

<zip destfile="${dist}/product.zip">
    <zipfileset dir="bin/project1.jar" prefix="any/fake/path/you/want"/>
    <zipfileset dir="bin/project2.jar" prefix="any/fake/path/you/want"/>
    <zipfileset dir="some/other/path/project3.jar" prefix="any/fake/path/you/want"/>
</zip>

Результатом будет:

any/fake/path/you/want/project1.jar
any/fake/path/you/want/project2.jar
any/fake/path/you/want/project3.jar
...