2014-01-13 1 views
2

Для проектов библиотеки Java артефакт для публикации является простым, поскольку выход представляет собой один файл jar. Тем не менее, у меня есть проект со следующим материалом публикации:Как публиковать собственные библиотеки с помощью Ivy?

  • MyLib.jar
  • armeabi/libStuff.so
  • armeabi-v7a/libStuff.so
  • MIPS/libStuff.so
  • x86/libStuff.so

Я не могу настроить все эти файлы .so как артефакты, так как все они имеют такое же имя. Каков рекомендуемый способ? Поместите все в почтовый ящик и позвольте пользователям использовать град (или муравей или что-то еще), чтобы разархивировать его до сборки? Должен ли я помещать файл Jar в сторону от почтового индекса? Существует ли конвенция для таких артефактов?

ответ

3

Лучший способ с Айви управлять многими «одинаковыми» артефактами, которые имеют только различие в архитектуре, заключается в использовании extra attributes.

Так что в вашем модуле вы провозгласите:

<publications xmlns:e="http://ant.apache.org/ivy/extra"> 
    <artifact name="MyLib" type="jar" ext="jar" /> 
    <artifact name="libStuff" type="native" ext="so" e:arch="armeabi" /> 
    <artifact name="libStuff" type="native" ext="so" e:arch="armeabi-v7a" /> 
    <artifact name="libStuff" type="native" ext="so" e:arch="mips" /> 
    <artifact name="libStuff" type="native" ext="so" e:arch="x86" /> 
</publications> 

недостатков является то, что вся ваша цепь вокруг Айви придется принять, что дополнительный атрибут во внимание. Например, вы должны быть в состоянии настроить хранилище, так что будет принимать пользовательский шаблон, как этот:

${repository.dir}/[organisation]/[module]/[arch]/[revision]/[artifact].[ext] 

Другое решение, как вы упомянули, является работа с папкой на молнии. И это может быть хорошим временем, так как Ivy 2.4, который вот-вот будет выпущен, поддерживает ZIP-папку через packaging.

Например, вы можете объявить:

<publications xmlns:e="http://ant.apache.org/ivy/extra"> 
    <artifact name="MyLib" type="jar" ext="jar" /> 
    <artifact name="libStuff" type="natives" ext="zip" packaging="zip" /> 
</publications> 

Затем Ivy загрузит libStuff-1.2.3.zip в свой кэш и будет автоматически распаковать его в кэш для libStuff-1.2.3, папку, в которой вы могли бы найти ваши несколько туземцев библиотек.

+0

Большое спасибо! На самом деле мы пытаемся заполнить сервер Nexus артефактами всех наших проектов (java, C#, c, C++ ...), и в некоторых из них нам действительно нужно сохранить иерархию каталогов. Поэтому особенность «упаковки» Айви кажется действительно интересной! –