Конвертировать ivy.xml в pom.xml - PullRequest
9 голосов
/ 24 февраля 2012

У меня есть ivy.xml - https://gist.github.com/1898060 У меня также есть файл jar, связанный с этим ivy.xml. Мне нужен механизм для импорта этого проекта в мой репозиторий Maven и использования его в моем проекте Maven. Так что, в принципе, если я могу конвертировать ivy.xml в pom.xml, я мог бы заставить его работать. Есть ли какой-то механизм, с помощью которого я могу достичь этого. Я ищу что-то вроде плагина Maven для выполнения этой задачи. Я знаю, что есть способы, которыми мы можем отредактировать ivy.xml и build.xml для достижения этой цели, но я не хочу этого делать, так как проект находится в закрытом репо.

Ответы [ 2 ]

17 голосов
/ 24 февраля 2012

Что вам действительно нужно сделать, это опубликовать jar-файлы, созданные проектом ANT, в ваш репозиторий Maven.

ant -Dproject.version=0.9.0-local-20120211095554 clean publish

Я знаю, что вы не хотите изменять сборку ANT, но создание дополнительной цели «публикации» правильно интегрирует ваши проекты ANT и Maven.

Два артефакта jar, опубликованные вашей модифицированной сборкой ANT, можно использовать как обычно:

<dependency>
    <groupId>com.opengamma</groupId>
    <artifactId>og-analytics</artifactId>
    <version>0.9.0-local-20120211095554</version>
</dependency>

<dependency>
    <groupId>com.opengamma</groupId>
    <artifactId>og-analytics</artifactId>
    <version>0.9.0-local-20120211095554</version>
    <classifier>sources</classifier>
</dependency>

Изменения в вашей сборке ANT

ivy.xml

Основные изменения в разделе публикаций:

<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
    <info organisation="com.opengamma" module="og-analytics"/>

    <publications>
      <artifact name="og-analytics" type="jar"/>
      <artifact name="og-analytics" type="pom"/>
      <artifact name="og-analytics" type="jar" e:classifier="sources"/>
    </publications>

    <dependencies>
      <dependency name="og-util" rev="0.9.0-local-20120211095525" revConstraint="latest.integration"/>

      <dependency org="org.jfree" name="jfreechart" rev="1.0.13"/>
      <dependency org="cern" name="colt" rev="1.2.0"/>
      <dependency org="cern" name="parallelcolt" rev="0.9.1"/>
      <dependency org="latexlet" name="latexlet" rev="1.11"/>
      <dependency org="org.apache.commons" name="commons-math" rev="2.1"/>

      <dependency org="it.dexy" name="json-doclet" rev="0.3.1"/>
      <dependency org="org.json" name="simple" rev="1.1"/>
      <exclude org="org.junit"/>
    </dependencies>
</ivy-module> 

Примечания:

  • Проект ANT теперь опубликует 3 файла: jar, исходный файл jar и Maven POM
  • В исходных файлах Maven есть атрибуты «классификатора», для которых заданы «источники» (не исходные). Для этого мы добавляем дополнительный атрибут ivy .
  • Не требуется информация о версии и статусе в заголовке тега info . Это будет добавлено к шагу публикации.

build.xml

<target name="prepare" description="Generate POM">
    <fail message="Unset property: project.version" unless="project.version"/>

    <ivy:deliver deliverpattern="${build.dir}/ivy.xml" pubrevision="${project.version}" status="release"/>

    <ivy:makepom ivyfile="${build.dir}/ivy.xml" pomfile="${build.dir}/${ivy.module}.pom"/>
</target>

<target name="publish" depends="build,prepare" description="Upload to Nexus">
    <ivy:publish resolver="nexus-deploy" pubrevision="${project.version}" overwrite="true" publishivy="false" >
        <artifacts pattern="${build.dir}/[artifact](-[classifier]).[ext]"/>
    </ivy:publish>
</target>

Примечания:

  • Задача доставить является необязательной, но рекомендуется, если файл ivy содержит динамические ревизии, такие как «latest.release» или «latest.integration».
  • Задача makepoms имеет мощную поддержку для преобразования конфигураций плюща в области Maven. Не применяется в вашем случае, но стимул, чтобы узнать больше о плюще: -)
  • Задача publish использует указанный шаблон для поиска файлов, указанных в разделе публикаций ivy.

ivysettings.xml

Здесь вы настраиваете расположение репозиториев и учетных данных, которые будут использоваться целью публикации сборки.

<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>

Примечания:

  • Для загрузки Ivy используется настроенный преобразователь по умолчанию nexus-central .
  • Задача публикации ivy отправляется в хранилище Nexus с именем nexus-deploy
  • Область безопасности в этом примере соответствует Nexus Maven. Будет отличаться для других менеджеров репо.
3 голосов
/ 24 февраля 2012

Apache Ant сам предоставляет задачу для этого - makepom .Всегда помогает справиться с документацией!

...