2012-04-17 21 views
5

He estado buscando por años tratando de encontrar una solución a mi problema, pero todas las otras publicaciones que he encontrado o no funcionan o no coinciden con mi situación, así que con suerte alguien me puede dar una idea.Cómo hacer que Ivy descargue las fuentes de Nexus repo

Tengo una biblioteca que estoy compilada con hormiga, que genera 2 archivos jar, uno como normal que contiene la versión compilada de la biblioteca y otro que contiene solo los archivos fuente.

Esta biblioteca se carga en nuestro repositorio Nexus con el paquete configurado en jar. Para el archivo jar real, establezco la extensión en jar y dejo el clasificador en blanco. Para el jar fuente, configuré el clasificador en las fuentes y la extensión en jar.

No importa lo que haga con mi archivo ivy.xml No puedo obtenerlo para descargar el archivo de fuentes. Sobre la base de los mensajes que he leído en otro lugar he intentado añadir:

conf="*->default,sources" 

a mi dependencia, pero luego me sale un error:

configuration not found in org#name;version: 'sources' 

Así que esto es básicamente esperando mi biblioteca para definir las fuentes como una configuración en alguna parte ? Pensé que solo tomaría el hecho de que hay otro artefacto con el clasificador establecido en las fuentes en el repositorio.

¿Alguien puede darme otras sugerencias de lo que podría estar haciendo mal con la forma en que he publicado mi biblioteca en Nexus o con la forma en que he configurado mi declaración de dependencia en mi archivo Ivy?

Este es el archivo Ivy.xml básico donde estoy definiendo mi dependencia en la biblioteca que he puesto en Nexus.

<ivy-module version="2.0"> 

    <info organisation="${ivy.organisation}" module="moduleName" /> 

    <configurations> 
     <conf name="pda" description="moduleName for PDA"/> 
     <conf name="server" description="moduleName for server"/> 
    </configurations> 

    <dependencies> 
     <!-- Internal --> 
     <dependency name="utility" org="${ivy.organisation}" rev="latest.integration" conf="${ivy.configuration}"/> 
     <dependency name="myLib" org="my.org" rev="0.0.+"/> 
    </dependencies> 

</ivy-module> 

En respuesta a los comentarios a continuación, la propiedad ivy.configuration se ajusta a la PDA dentro de mis build.properties para Ant. Para Eclipse, he creado un archivo de propiedades y también configuro ivy.configuration para pda (este archivo de propiedades se referencia en la configuración de Ivy dentro de Eclipse).

El mensaje de error que consigo es:

Some projects fail to be resolved 
    Impossible to resolve dependencies of ${ivy.organisation}#moduleName;[email protected] 
     unresolved dependency: my.org#myLib;0.0.+: configuration not found in my.org#myLib;0.0.0: 'sources'. It was required from ${ivy.organisation}#moduleName;[email protected] pda 

ACTUALIZACIÓN Aquí está el archivo ivy.xml resuelto:

<?xml version="1.0" encoding="UTF-8"?> 
<ivy-module version="2.0"> 
    <info organisation="my.org" 
     module="myLib" 
     revision="0.0.0" 
     status="release" 
     publication="20120419131909" 
     default="true" 
    /> 
    <configurations> 
     <conf name="default" visibility="public"/> 
    </configurations> 
    <publications> 
     <artifact name="myLib" type="jar" ext="jar" conf="default"/> 
    </publications> 
</ivy-module> 

Obviamente, esto explica por qué no funciona para encontrar las 'fuentes' conf. Pero tenía la impresión de que las fuentes conf deberían agregarse automáticamente porque agregué las fuentes a Nexus.

+0

¿Puedes imprimir tu ivy.xml? – Matt

+0

Para el archivo de hiedra anterior, especifico qué configuración ejecutar en mi archivo de propiedades de ant, o usar IvyDE en Eclipse (y en mi caso es la configuración de PDA que estoy ejecutando) – DaveJohnston

+0

@DaveJohnston ¿lo leí correctamente? ¿No usas la tarea de publicación de ivy, pero copias manualmente los archivos jars y el archivo ivy.xml anterior al repositorio? Si ese es el caso, a su ivy.xml le faltan las etiquetas de publicación, que son necesarias para la recuperación. – oers

Respuesta

2

Así que después de un montón de jugar un rato me parece finalmente tener una solución a esto. Si Declaro mi dependencia de la siguiente manera:

<dependency name="myLib" org="my.org" rev="0.0.+"> 
    <artifact type="jar"/> 
    <artifact type="source" m:classifier="sources" conf="pdaDev->sources"/> 
</dependency> 

entonces puedo añadir una nueva configuración (por ejemplo pdaDev arriba) que enlaza con la configuración de las fuentes de la dependencia. Cuando uso Eclipse, puedo decirle que use la configuración de pdaDev y también extrae el contenedor fuente (si existe).

Parece extraño que Nexus no parezca incluir la configuración de las fuentes en el archivo Ivy resuelto a menos que se solicite explícitamente como he hecho anteriormente.

0

Crea dos configuraciones en tu archivo ivy. Uno para los binarios que deberían estar en su classpath el otro para los jar de fuente.

En segundo lugar, crear dos asignaciones de configuración en la dependencia:

<ivy-module version="2.0"> 
    <info organisation="org.demo" module="demo"/> 
    <configurations> 
     <conf name="compile" description="jars used for compilation classpath"/> 
     <conf name="sources" description="Source jars"/> 
    </configurations> 
    <dependencies> 
     <dependency org="org.slf4j" name="slf4j-simple" rev="1.6.4" conf="compile->default;sources->sources"/> 
    </dependencies> 
</ivy-module> 

NOTA:

Dentro de su construcción ANT puede utilizar las configuraciones de la siguiente manera:

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

    <!-- Populate a compile classpath for use with javac task --> 
    <ivy:cachepath pathid="compile.path" conf="compile"/> 

    <!-- Put source jars in the src directory --> 
    <ivy:retrieve pattern="src/[artifact]-[revision](-[classifier]).[ext]" conf="sources"/> 

</target> 
+0

Eso es más o menos lo que ya probé, pero se queja de que las fuentes de conf no se encuentran en mi dependencia. ¿Hay algo que deba hacer en mi dependencia al agregarlo a Nexus para agregar la configuración de las fuentes? Pensé que haría esto automáticamente cuando agregue un artefacto con las fuentes del clasificador. – DaveJohnston

+0

La configuración de "fuentes" debería estar disponible en todos los módulos Maven remotos (ver el enlace en mi respuesta anterior). ¿Podría actualizar su publicación con el error que está recibiendo? Además, debe indicarme su asignación de configuración (valor de la propiedad ivy.configuration) ... Básicamente, actualmente no sé cómo reproducir su problema ... –

+0

He editado mi pregunta con el mensaje de error que obtener y los valores de configuración. – DaveJohnston

2

que debe reportar a la hiedra sobre las configuraciones cuando se publica artefactos. Por ejemplo:

<ivy-module version="2.0"> 
    <info organisation="apache" module="commons-lang" revision="2.5" 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-lang" ext="jar" conf="binary" type="jar"/> 
     <artifact name="commons-lang-javadoc" ext="jar" conf="development" type="javadoc"/> 
     <artifact name="commons-lang-sources" ext="jar" conf="development" type="source"/> 
    </publications> 
</ivy-module> 

Como puede ver, commons-lang.jar publicó en configuración binaria. Pero commons-lang-sources y commons-lang-javadoc se publicaron en configuración de desarrollo.

Al recuperar dependencias se debe utilizar la siguiente ivy.xml:

<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="bitrete" module="strongpoint" status="development"/> 
    <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="strongpoint" ext="jar" type="jar"/> 
    </publications> 
    <dependencies> 
     <dependency org="apache" name="commons-lang" rev="2.5"/> 
    </dependencies> 
</ivy-module> 

y proporcionar la configuración deseada cuando se resuelve con Ant:

<property name="ivy.conf" value="binary"/> 
... 
<property name="ivy.conf" value="development"/> 
... 
<ivy:resolve conf="${ivy.conf}"/> 
+0

¿Pero cómo publico esta información de configuración en un repositorio de Nexus? Hasta ahora he publicado los artefactos usando Ant, y luego los cargo manualmente en Nexus. Esto implica seleccionar qué archivos pertenecen a la biblioteca y asignar un clasificador (por ejemplo, fuentes). Entonces, ¿dónde se almacena la información sobre la configuración de la biblioteca en Nexus? – DaveJohnston

Cuestiones relacionadas