Плющ: получение снимка, опубликованного в Nexus и его зависимостях - PullRequest
3 голосов
/ 13 октября 2010

Я использую Ivy для публикации снимка встроенного Jar в локально размещенном репозитории Nexus с использованием следующей цели Ant.

<target name="publish">
    <ivy:publish resolver="nexus_snapshot" pubrevision="SNAPSHOT" overwrite="true">
        <artifacts pattern="${dist.dir}/[artifact].[ext]" />
    </ivy:publish>
</target>

Это работает нормально, в результате чего Jar и связанный с ним плющ.xml, присутствующий в репозитории (с именами файлов mymodule-SNAPSHOT.jar и ivy-SNAPSHOT.jar).

Позже, в другом скрипте сборки, я хочу получить Jar и связанные с ним зависимости (т.е. как указанов его ivy.xml) в каталог.

Это цель Ant, которую я использую.

<target name="deploy">
    <delete dir="deploy" />
    <mkdir dir="deploy" />
    <ivy:settings file="${ivy.dir}/ivy_deploy_settings.xml" />
    <ivy:retrieve organisation="myorg" module="mymodule" 
       inline="true" revision="SNAPSHOT" pattern="deploy/[artifact].[ext]"/>
</target>

Это извлекает Jar в каталог, но не его зависимости.Кроме того, если я добавлю

conf="impl"

к извлечению, произойдет сбой, так как конфигурация не найдена.

Таким образом, получается, что извлечение просто не ссылается на ivy.xml иследовательно, не разрешать зависимости.

Должно ли это работать или я что-то неправильно понимаю?

1 Ответ

4 голосов
/ 14 октября 2010

Я теперь решил эту проблему. Я считаю, что проблема в том, что Nexus работает с использованием файлов POM, а не файлов Ivy (по крайней мере, по умолчанию - я не вижу соответствующих параметров конфигурации).

Поэтому решение состоит в том, чтобы сгенерировать подходящее POM и опубликовать его вместе с Jar.

<target name="publish">
    <property name="generated.ivy.file" value="${dist.dir}/ivy.xml" /> 
    <ivy:deliver deliverpattern="${generated.ivy.file}"
        organisation="${ivy.organisation}" 
        module="${ivy.module}" status="integration"
        revision="${ivy.revision}"
        pubrevision="SNAPSHOT"
        conf="impl" />

<ivy:makepom ivyfile="${generated.ivy.file}" 
    pomfile="${dist.dir}/${ivy.module}.pom"/>

    <ivy:publish resolver="nexus_snapshot" pubrevision="SNAPSHOT" 
        publishivy="false" status="integration" overwrite="true">
        <artifacts pattern="${dist.dir}/[artifact].[ext]" /> 
        <artifact name="${ivy.module}" type="pom" ext="pom"/>
    </ivy:publish> 
</target>

Обратите внимание, что сначала я создаю файл Ivy для текущего модуля (и мою желаемую конфигурацию), чтобы создать POM из.

...