Nexus - это, прежде всего, репозиторий Maven, это означает, что нужно приспосабливаться к тому, как артефакты Maven-структур.
Поскольку вы сосредоточены на массовой загрузке Nexus, я предлагаю посмотреть на ответ на следующий вопрос:
Загрузка артефактов в Nexus без Maven
Если вы хотите придерживаться плюща, читайте дальше .....
Фон
Требуется POM Maven
Ваша первая проблема заключается в том, что для ваших модулей Maven потребуется файл POM.Этот файл описывает модуль maven и может быть легко сгенерирован из содержимого вашего ivy.xml файла (см. Решение ниже).
Во-вторых, Maven предполагает, что существует one строится основной артефакт.Например:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.myspotontheweb</groupId>
<artifactId>donaldduck</artifactId>
<version>1.0.1</version>
<packaging>txt</packaging>
</project>
Клиент Maven преобразует эту информацию в следующий URL-адрес:
http://<host>/<repo>/com/myspotontheweb/donaldduck/1.0.1/donaldduck-1.0.1.txt
Это демонстрирует, как Nexus может хранить бинарные зависимости любого типа.Параметр package по умолчанию равен "jar".
Как maven обрабатывает дополнительные артефакты модуля
Хотя Maven фокусируется на одном артефакте сборки, можно добавить дополнительные дополнительные артефактыразместив их в том же каталоге (как вы сделали).
Это , а не , перечисленные в POM Maven.Вместо этого Maven использует специальный атрибут «классификатор».Ниже приведена возможная декларация зависимости.
<dependency>
<groupId>com.myspotontheweb</groupId>
<artifactId>donaldduck</artifactId>
<version>1.0.1</version>
<classifier>metadata</classifier>
<type>n3</type>
</dependency>
Клиент Maven преобразует это в следующий URL:
http://<host>/<repo>/com/myspotontheweb/donaldduck/1.0.1/donaldduck-1.0.1-metadata.n3
Проекты с открытым исходным кодом обычно выпускают свой исходный код таким образом.
Ivy Solution
Итак наконец как можно публиковать файлы в Nexus с помощью ivy?
Прежде всего решите, какой артефакт является "основным" артефактом сборкии добавьте дополнительную запись для вашего файла POM:
<ivy-module version='2.0' xmlns:e="http://ant.apache.org/ivy/extra">
<info organisation="com.myspotonontheweb" module="donaldduck" revision="1.0.1"/>
<publications>
<artifact name="donaldduck" type="txt"/>
<artifact name="donaldduck" type="pom"/>
<artifact name="donaldduck" type="n3" e:classifier="metadata"/>
<artifact name="donaldduck" type="zip" e:classifier="disto"/>
</publications>
</ivy-module>
Другие файлы также могут быть перечислены, но каждый из них должен иметь уникальный атрибут классификатор ..... Здесь вы столкнетесьс одной из классических проблем при переводе проекта ANT в Maven .... Каждый файл jar, который вы публикуете, вероятно, будет нуждаться в отдельном POM.На самом деле они не являются «дополнительными» артефактами .....
Делая вид, что вам не нужно публиковать несколько модулей .... Используйте следующие цели сборки для публикации вашего модуля:
<target name="prepare" description="Generate POM">
<!-- Optional: Intermediate file containing resolved version numbers -->
<ivy:deliver deliverpattern="${build.dir}/ivy.xml" pubrevision="${publish.revision}" status="release"/>
<!-- Generate the Maven POM -->
<ivy:makepom ivyfile="${build.dir}/ivy.xml" pomfile="${build.dir}/donaldduck.pom"/>
</target>
<target name="publish" depends="init,prepare" description="Upload to Nexus">
<ivy:publish resolver="nexus-deploy" pubrevision="${publish.revision}" overwrite="true" publishivy="false" >
<artifacts pattern="${build.dir}/[artifact](-[classifier]).[ext]"/>
</ivy:publish>
</target>
учетные данные Nexus
А для полноты вот файл ivysettings.xml , содержащий расположение и учетные данные хранилища Nexus:
<ivysettings>
<settings defaultResolver="nexus-central"/>
<credentials host="somehost" realm="Sonatype Nexus Repository Manager" username="????" passwd="????"/>
<resolvers>
<ibiblio name="nexus-central" root="http://somehost/nexus/content/repositories/central/" m2compatible="true"/>
<ibiblio name="nexus-deploy" root="http://somehost/nexus/content/repositories/repo" m2compatible="true"/>
</resolvers>
</ivysettings>
Обновление
ЗагрузкаАртефакты
Для извлечения всех опубликованных артефактов (не только основного), вы должны перечислить их следующим образом:
<dependency org="com.myspotontheweb" name="donaldduck" rev="1.0.1">
<artifact name="donaldduck" type="txt"/>
<artifact name="donaldduck" type="n3" e:classifier="metadata"/>
<artifact name="donaldduck" type="zip" e:classifier="distro"/>
</dependency>
Функционально аналогично следующемуMaven фрагмент:
<dependency>
<groupId>com.myspotontheweb</groupId>
<artifactId>donaldduck</artifactId>
<version>1.0.1</version>
<type>txt</type>
</dependency>
<dependency>
<groupId>com.myspotontheweb</groupId>
<artifactId>donaldduck</artifactId>
<version>1.0.1</version>
<classifier>metadata</classifier>
<type>n3</type>
</dependency>
<dependency>
<groupId>com.myspotontheweb</groupId>
<artifactId>donaldduck</artifactId>
<version>1.0.1</version>
<classifier>distro</classifier>
<type>zip</type>
</dependency>