2017-02-06 18 views
0

У меня есть процесс сборки Ant/Ivy, который я пытаюсь улучшить. Мне нужно разрешить зависимости, а затем извлечь их в определенную папку.Ant Цель развернуть архивы зависимости

Зависимости разрешают местоположение $(build_root)/dependency/downloads/[configuration]/[artifactId]/[version]/, и это работает нормально. Я в конечном итоге с .pom и .tar.bz2 файл в этом месте.

Что бы я хотел сделать, это немного больше контроля над извлечением .tar.bz2 зависимостей в каталог. Мы в основном пытаемся предотвратить конфликты для зависимостей lib и inc, контролируя, как и где происходит извлечение вывода .tar.bz2.

В настоящее время мы делаем это путем разрешения всех зависимостей, а затем с целью развернуть архивы вслепую.

Наш шаг решительность выглядит следующим образом:

<target name="resolve"> 
    <ivy:retrieve pattern="${dependency.dir}/[conf]/[artifact]/[artifact]-[revision].[ext]" conf="*" /> 
    <condition property="archive.dir.present"> 
     <resourceexists> 
      <file file="${dependency.dir}"/> 
     </resourceexists> 
    </condition> 
    <antcall if:set="archive.dir.present" target="expand-archives"/> 
</target> 

Обратите внимание на отдельный вызов цели «расширения-архив», который выглядит как:

<target name="expand-archives" description="Expand your Dependency Archives!"> 
    <for param="file"> 
     <path> 
      <fileset dir="${dependency.dir}" includes="**/*.tar.bz2"/> 
     </path> 
     <sequential> 
      <bunzip2 src="@{file}" dest="${dependency.dir}" /> 
     </sequential> 
    </for> 
    <!-- Follow the bunzip2 by the tar command to extract the tarball --> 
    <for param="file"> 
     <path> 
      <fileset dir="${dependency.dir}" includes="**/*.tar"/> 
     </path> 
     <sequential> 
      <echo message="Processing: @{file}"/> 
      <exec executable="tar" failonerror="true"> 
       <arg value="-C"/> 
       <arg value="${dependency.dir}"/> 
       <arg value="-xvf"/> 
       <arg value="@{file}"/> 
      </exec> 
     </sequential> 
    </for> 
</target> 

То, что я хотел бы, чтобы это dest="${dependency.dir} к нему добавлен артефактID зависимости.

Есть ли способ получить [artifact] информацию извлечения и передачи в цель expand-archives?

Спасибо

+0

Я продолжал делать исследования и, кажется, что я должен использовать 'Триггеры' для решения моей проблемы. Я обновлю, как только я получу его работу. Дальнейшие предложения/советы приветствуются. –

ответ

0

Если у вас есть зависимость от файлов, находящихся в архивах, возможно, вы должны исследовать packager resolver в плющом.

Этот резольвер предназначен для загрузки и извлечения архивов, а затем используется фрагмент ANT для определения того, какие файлы внутри вас должны зависеть. На первый взгляд сложный, но однажды понятый очень мощный.

В следующем примере показано, как зависит от кувшина, который содержится в загружаемом «.tar.gz» архива: