ant - Ivy: Obteniendo Javadocs y Fuentes
(1)
Soy bastante nuevo para Ivy, pero he logrado que funcione con las dependencias de jar. El problema es tratar de configurarlo, así que puedo buscar javadocs y fuentes independientemente de jar.
Tengo un proyecto de prueba simple, pero no importa lo que estoy haciendo, estoy buscando el archivo jar con los archivos de clase.
Tengo el siguiente archivo ivy.xml
:
<ivy-module version="1.0">
<info
organisation="com.vegicorp"
module="test"
revision="1.0"
status="release"/>
<configurations>
<conf name="default" visibility="public" extends="runtime,master"/>
<conf name="master" visibility="public"/>
<conf name="compile" visibility="public"/>
<conf name="provided" visibility="public"/>
<conf name="runtime" visibility="public" extends="compile"/>
<conf name="test" visibility="private" extends="runtime"/>
<conf name="system" visibility="public"/>
<conf name="sources" visibility="public"/>
<conf name="javadoc" visibility="public"/>
<conf name="optional" visibility="public"/>
</configurations>
<dependencies>
<dependency org="commons-logging" name="commons-logging" rev="1.1.1"
conf="compile->default"/>
<dependency org="commons-logging" name="commons-logging" rev="1.1.1"
conf="sources->default">
<artifact name="commons-logging" type="sources" ext="jar"/>
</dependency>
<dependency org="commons-logging" name="commons-logging" rev="1.1.1"
conf="javadoc->default">
<artifact name="commons-logging" type="javadoc" ext="jar"/>
</dependency>
</dependencies>
</ivy-module>
Y el siguiente build.xml
:
<project name="ivy-test" default="default" basedir="."
xmlns:ivy="http://ant.apache.org/ivy">
<property name="ivy.dir" value="${basedir}/ivy.dir"/>
<import file="${ivy.dir}/ivy.tasks.xml"/>
<property name="target.dir" value="${basedir}/lib"/>
<target name="-resolve">
<ivy:resolve/>
</target>
<target name="clean">
<delete dir="${target.dir}"/>
<ivy:cleancache/>
</target>
<target name="default"
depends="-resolve">
<fail message="ivy.conf is not defined">
<condition>
<not>
<isset property="ivy.conf"/>
</not>
</condition>
</fail>
<delete dir="${target.dir}"/>
<mkdir dir="${target.dir}"/>
<ivy:retrieve conf="${ivy.conf}"
pattern="${target.dir}/[artifact]-[revision].[ext]"/>
</target>
</project>
En la línea de comando, teclearé:
$ ant -Divy.conf=compile
Y, eso debería descargar el archivo jar con las clases.
Sin embargo, si lo escribo así:
$ ant -Divy.conf=sources
Quiero el archivo jar que contiene las fuentes y no las clases, y cuando escribo esto:
$ ant -Divy.conf=javadoc
Quiero el archivo jar que contiene el javadoc y no las fuentes.
Estoy bastante seguro de que es mi ivy.xml
que no está del todo bien. Intenté esto originalmente:
<dependencies>
<dependency org="commons-logging" name="commons-logging" rev="1.1.1">
<artifact name="commons-logging" type="jar" ext="jar" conf="compile->default"/>
<artifact name="commons-logging" type="sources" ext="jar" conf="sources->default"/>
<artifact name="commons-logging" type="javadoc" ext="jar" conf="javadoc->default"/>
</dependency>
Eso descargó el jar, las fuentes y javadoc, pero de una vez, no importa qué configuración intenté.
De acuerdo, creo que lo he descubierto. Estaba pensando todo este proceso. Mi sección <dependencies>
debería verse así:
<dependencies>
<dependency org="commons-logging" name="commons-logging" rev="1.1.1"
conf="javadoc->javadoc;sources->sources;compile->default"/>
</dependencies>
Esto mapea mi javadoc
para el javadoc
de Maven y mis sources
para las sources
de Maven. Cuando mapeé conf="sources->default"
, estaba mapeando mis sources
a Maven default
que son las dependencias de compilación.
Puedo especificar todas las configuraciones en una línea, y no necesito entidades <artifact>
separadas.