java - cantante - Convierta ivy.xml en pom.xml
maven vs gradle (2)
Tengo un ivy.xml - https://gist.github.com/1898060 También tengo el archivo jar relacionado con este ivy.xml. Lo que necesito es un mecanismo para importar este proyecto a mi repositorio maven y usarlo en mi proyecto maven. ASÍ QUE, básicamente, si puedo convertir ivy.xml a pom.xml, es posible que pueda hacer que funcione. ¿Hay algún mecanismo por el cual pueda lograr esto? Estoy buscando algo así como un plugin maven para llevar a cabo esta tarea. Sé que hay formas de editar el ivy.xml y el build.xml para lograr esto, pero no quiero hacerlo, ya que el proyecto está en un repositorio privado.
Apache Ant sí mismo proporciona una tarea para hacer esto - makepom . ¡Siempre ayuda a consultar la documentación!
Lo que realmente necesita hacer es publicar los archivos jar creados por el proyecto ANT en su repositorio Maven.
ant -Dproject.version=0.9.0-local-20120211095554 clean publish
Sé que no quieres cambiar la compilación de ANT, pero crear un objetivo adicional de "publicación" integrará correctamente tus proyectos ANT y Maven.
Los dos artefactos de jar, publicados por su compilación ANT modificada, se pueden consumir normalmente de la siguiente manera:
<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>
Modificaciones a tu construcción de ANT
ivy.xml
Los principales cambios son a su sección de publicaciones:
<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>
Notas:
- El proyecto ANT ahora publicará 3 archivos, jar, sources jar y el Maven POM
- En Maven los jar de origen tienen un atributo de "clasificador" que está configurado en "fuentes" (no fuente). Para facilitar esto, estamos agregando un atributo extra de hiedra .
- No se necesita información de versión y estado en el encabezado de la etiqueta de información . Esto será agregado por el paso de publicación.
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>
Notas:
- La tarea de entrega es opcional, pero se recomienda en caso de que su archivo ivy contenga revisiones dinámicas, como "latest.release" o "latest.integration".
- La tarea de makepoms tiene un poderoso soporte para configuraciones de conversión de hiedra en los alcances de Maven. No se aplica en su caso, pero es un incentivo para aprender más sobre la hiedra :-)
- La tarea de publicación utiliza un patrón específico para buscar los archivos especificados en la sección de publicaciones de ivy.
ivysettings.xml
Aquí es donde configura la ubicación de los repositorios y las credenciales que utilizará el objetivo de publicación de compilación.
<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>
Notas:
- Las descargas de Ivy usan el resolver predeterminado configurado nexus-central .
- La tarea de publicar ivied empuja al repositorio de Nexus llamado nexus-deploy
- El reino de la seguridad en este ejemplo coincide con Nexus Maven. Sería diferente para otros gerentes de repo.