Как публиковать баночки с разными именами на плющ с помощью Ant - PullRequest
2 голосов
/ 01 сентября 2011

Я только начал использовать Ivy, и я действительно изо всех сил, так как я нашел документацию и учебные пособия на сайте Apache очень запутанными и не имеет отношения к тому, как я хочу их использовать.

Я хочу опубликовать некоторые jar-файлы в локальном репозитории Ivy с помощью Ant.Сценарий Ant создает четыре файла jar:

  • sed-ws-client.jar
  • sed-ws-client-src.jar
  • sed-enums.jar
  • sed-enums-src.jar

Эти файлы должны находиться в двух разных каталогах в хранилище Ivy (например, каталог sed-ws-client и каталог sed-enums).В настоящее время репозиторий содержит версии 0.0ar и 0.0.2 этих jar-файлов в соответствующих каталогах с соответствующими файлами ivy- [version] .xml (это было сделано вручную).

У меня многопроблема в выяснении того, как создать цель публикации "Ant" и файл ivy.xml проекта.Я вынужден поместить имя модуля в тег info файла ivy.xml, но это может означать, что я могу публиковать файлы jar только в одном каталоге в репозитории Ivy?

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

Вот что у меня есть:

ivy.xml file:

<ivy-module version="1.0">
<info organisation="myorg" module="SED" revision="1.0" status="dev"></info>

<publications>
    <!-- ws-client -->
    <artifact name="sed-ws-client"/>
    <artifact name="sed-ws-client" type="src"/>

    <!-- generated -->
    <artifact name="sed-enums"/>
    <artifact name="sed-enums" type="src"/>

</publications>

</ivy-module>

Цель Ant:

<target name="ivy-publish" description="Produce the ivy.xml file for the built jars">
    <ivy:settings file="d:/temp/ivy/ivysettings.xml" />
    <ivy:retrieve />
    <ivy:publish organisation="myorg" resolver="default" pubrevision="0.0.2" update="true">
        <artifacts pattern="${DEPLOY_DIR}/${sed.ws.client.jar}-[type].[ext]" />
        <artifacts pattern="${DEPLOY_DIR}/${sed.enums.jar}-[type].[ext]" />
    </ivy:publish>
</target>

Ответы [ 2 ]

5 голосов
/ 01 сентября 2011

Я решил это с 2 файлами плюща, потому что мой проект публикует 2 модуля.И каждому модулю нужен свой ivy.xml.Это моя цель для второго модуля, который имеет собственный файл ivy (ivy-SI.xml).

  <target name="ivy-publish-si">
    <ivy:settings file="${basedir}/../KS.build/ivysettings.xml" />
    <!--resolve ist need for publish -->
    <ivy:resolve
      file="ivy-SI.xml"
      revision="${project.version}"
      conf="compile"
    />
    <ivy:publish 
      srcivypattern="ivy-si.xml"
      resolver="jars.local" 
      conf="compile" 
      overwrite="true"
      revision="${project.version}">  
      <artifacts pattern="dist/[artifact]-[revision].[type]" />
    </ivy:publish>

ivy-SI.xml довольно стандартен:

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
<info organisation="readybank" 
  module="KS.SessionInterface" 
  revision="${project.version}"
  status="integration"/>
<configurations>

    <conf name="compile" visibility="public"/>
    <conf name="run" visibility="public"/>
    <conf name="deploy" visibility="public"/>
</configurations>
<publications>
   <artifact name="KS.SessionInterface" type="jar" conf="compile" ext="jar"/>
</publications>
<dependencies>
</dependencies>

</ivy-module>
3 голосов
/ 01 сентября 2011

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

Ваша сборка не удалась, потому что задача публикации не смогла найти артефакты для публикации.

Например, в этом задании на публикацию:

<ivy:publish resolver="${ivy.repository}" update="true" overwrite="true">
  <artifacts pattern="${artifacts.dir}/[artifact].[ext]"/>
</ivy:publish>

мы сказали Ivy взять артефакты с именами и расширениями, как описано в ivy.xml из папки $ {artifacts.dir}, и опубликовать их. И ivy.xml в этом случае выглядит так:

<ivy-module version="2.0">
<info organisation="apache" module="commons-cli" revision="1.2" status="release"/>
<configurations>
    <conf name="binary" description="provide only binary files"/>
    <conf name="development" extends="binary" description="provide binary files with javadoc and sources"/>
</configurations>
<publications>
    <artifact name="commons-cli" ext="jar" conf="binary" type="jar"/>
    <artifact name="commons-cli-javadoc" ext="jar" conf="development" type="javadoc"/>
    <artifact name="commons-cli-sources" ext="jar" conf="development" type="source"/>
</publications>

...