Как плющ: опубликовать работу?

голоса
24

Я полностью в догадках, как муравей плющ задача: публиковать предполагается работать.

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

Как я могу указать, откуда извлечь встроенные банки, и как бы те, в конечном итоге в хранилище?

Обновить:

<target name=publish-local description=--> Publish Local>
    <ivy:retrieve />
    <ivy:publish resolver=local pubrevision=${release.version} status=release update=true overwrite=true>
        <artifacts pattern=${dist.dir}/[organisation]-[module].[ext] />
    </ivy:publish>
</target>

это на самом деле работает, я не включать извлечения раньше.

Но я до сих пор есть некоторые проблемы, предположим, что я хочу опубликовать 3 баночки, OpenSCADA-utils.jar, OpenSCADA-Utils-sources.jar и OpenSCADA-Utils-javadocs.jar в OpenSCADA-Utils-0.9.2.jar, OpenSCADA-утилитами -0.9.2-sources.jar и OpenSCADA-Utils-0.9.2-javadocs.jar

Это не совсем ясно для меня, как фактические имена собраны, и где я могу указать, какие имена они должны получить. (Используя фрагмент выше, банки всегда вызываются только utils.jar).

Обновление 1:

Я получил его на работу (немного), но он все еще не чувствует себя хорошо. Как-то все учебники сосредоточиться на зависимости от проектов 3-й партии, но не менее важный момент для меня, чтобы обработать проект конкретных зависимостей.

У меня есть куча суб проектов, которые зависят друг от друга различными способами. Учитывая плющ: опубликовать его не понятно мне, как начать.

  1. Как справиться с первой версией? У меня есть общий номер версии для всех подпроектов, чтобы указать, что они принадлежат друг другу (позволяет сказать, что 0.9). Поэтому первая редакция должна быть 0.9.0, но до сих пор ничего из моих проектов не находится в моем хранилище. Как получить Айви присвоить этот номер версии.

  2. В ходе разработки я хочу еще раз опубликовать встроенные файлы, не меняя номер версии до сих пор.

  3. Если я закончил с моей работой я хочу, чтобы подтолкнуть его в общее хранилище (и увеличить номер версии позволяет сказать, что от 0.9.0 до 0.9.1), что рекомендуемый подход, чтобы сделать это?

  4. Для фактического освобождения, я хочу, чтобы сделать распределение с зависимостями и без, как-то я думаю, я могу использовать различные конфигурации для этого. Как я могу использовать это в свою пользу?

Задан 09/12/2008 в 17:18
источник пользователем
На других языках...                            


4 ответов

голоса
9

Вы должны указать «распознаватель». Что-то вроде:

<ivy:publish resolver="local" pubrevision="1.0"/>

Это контролируется шаблоном. Эта страница покрывает его довольно хорошо. Похоже , что вы хотите , чтобы ваш:

<artifacts pattern="${dist.dir}/[organisation]-[module]-[revision]-[type].[ext]" />

И вам нужно определить три баночки как артефакты в файле ivy.xml. Что-то вроде этого:

<publications>
    <artifact name="utils"/>
    <artifact name="utils" type="source"/>
    <artifact name="utils" type="javadocs"/>
</publications>
Ответил 09/12/2008 в 17:30
источник пользователем

голоса
4

Сначала вам нужен файл ivy.xml.

<ivy-module version="2.0">
    <info organisation="com.example.code" module="MyProject"
         revision="${project.revision}"/>
    <configurations>
        <conf name="runtime" description="" />
        ... other config elements here...
    </configurations>

    <publications defaultconf="runtime">
        <artifact name="MyProject" type="jar" ext="jar" conf="runtime" />
    </publications>

    <dependencies>
        ...
    </dependencies>
</ivy-module>

В элементе информации и публикация элементы ivy.xml позволяет пропустить различные атрибуты плюща элементов в build.xml.

Обратите внимание, что $ {project.revision} в ivy.xml. Свойство задается значение в build.xml, но это, кажется, работает хорошо. Пересмотр может затем легко иметь любое значение, не требуется (например, ночные сборки по сравнению с местной сборки).

Вот пример, как можно создать файл build.xml

<property name="project.revision" value="1.0.0"/>

...

<target name="ivy">
    <ivy:resolve />

    <!-- Possible ivy:report, ivy:retrieve and other
    elements for managing your dependencies go here -->

    <ivy:deliver conf="*(public)"/> 
</target>

<target name="publish" depends="clean, ivy, jar">
    <ivy:publish resolver="local">
        <!-- possible artifacts elements if your artifacts
        are not in standard location -->
    </ivy:publish>
</target>

...
Ответил 13/01/2012 в 17:28
источник пользователем

голоса
2

Вы предположите , чтобы запустить <ivy:deliver/>задачу первой. Это создает файл ivy.xml , который может быть использован в хранилище Ivy.

При использовании <ivy:publish>необходимо указать , какие хранилища вы хотите опубликовать, указав его в resolverпараметре. Это должно совпадать с именем распознавателя в вашем ivy.settings.xmlфайле.

Вы действительно не указать артефакты, но картина , где найти артефакты для публикации. Необходимо указать это с помощью <artifacts>подзадачи на <ivy:publish>задаче. Например, если вы строите все под ${basedir}/target/archiveдиректории , как мы делаем, вы можете указать его как это:

<ivy:publish resolver="public">
   <artifacts path="target/archive/[artifact].[ext]"/>
</ivy:publish>

Если вы хотите изменить номер версии файла, вы можете использовать pubrevision параметр <ivy:publish>задачи. Это не обновлять ivy.xml, но публиковать свои баночки / войны в правильной редакции. Я предпочитаю использовать pubrevision параметр <ivy:deliver>задачи и пусть это создать правильный ivy.xmlфайл в любом случае. Затем <ivy:publish>будет использовать версию в моем ivy.xmlфайле.

Вам не нужно делать <ivy:retrieve>. В конце концов, вы запустили сборку , чтобы создать новые банки, и они должны быть где - то в вашей сборке. В противном случае, если вы не создаете баночку или войну , что вы пытаетесь опубликовать в репозиторий Ivy? И, конечно , не хотите , чтобы получить что - то уже в вашем хранилище Ivy просто переиздать его.


Моя философия всегда была , что публикация является задачей CM и не должно быть сделано в рамках процедуры сборки. Таким образом, мы не используем <ivy:deliver>или <ivy:publish>.

Мы используем Artifactory в нашем хранилище Ivy (и наш репозиторий Maven). Мы используем Дженкинс в качестве нашего постоянного сервера сборки.

То , что я делаю, есть разработчики сделать pom.xmlфайл из их ivy.xmlфайла с помощью <ivy:makepom>задачи. Это и строят банки / войны сохраняются как архивные артефакты в Дженкинс.

Когда мы счастливы с конкретной сборкой и хотят его в нашем общедоступном хранилище, я использую Дженкин - х Поощрять задачу сборки продвигать конкретную банку / войну с ее pom.xml в наше хранилище Artifactory. Мы используем mvn deploy:deploy-fileзадачу , чтобы сделать это.

Ответил 28/08/2012 в 19:07
источник пользователем

голоса
0

Важно понимать, что плющ делает здесь. Это не просто копирование ваших артефактов баночки в хранилище плюща - это также генерировать соответствующие файлы «.ivy.xml», которые определяют все иждивенец каждого из ваших артефактов.

Под одеялом, то ivy:retrieveзадача на самом деле также запуск ivy:resolve. При том , что плющ: происходит решительность, файл записываются в локальный кэш плюща (в .ivyпапке user.home) , который определяет , как разрешение было (. Какое исправленные , какие модули были необходимы для завершения разрешения) Когда ivy:publishвстречаются, что разрешение запись извлекается из кэша и используются для создания ivy.xml для ваших артефактов.

Самый большой ловушкой я нашел в этом является требование о том , что ivy:resolveи ivy:publishзадачи , как быть загружен тем же загрузчиком классов , когда они выполняются муравья. Самый простой способ убедиться , что это происходит, чтобы использовать loaderRef на ваших taskdef задач. Например (обратите внимание на теги соответствия loaderRef):

<taskdef name="ivy-retrieve" 
     classname="org.apache.ivy.ant.IvyRetrieve" 
     classpathref="ivy.lib" 
     loaderRef="ivy.loader"/>
<taskdef name="ivy-publish" 
     classname="org.apache.ivy.ant.IvyPublish" 
     classpathref="ivy.lib" 
     loaderRef="ivy.loader"/>
Ответил 10/12/2008 в 07:10
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more