2008-10-29 12 views
44

me gustaría lanzar un proyecto instantáneo 'foo-1.0-SNAPSHOT' utilizando el complemento de lanzamiento maven. El proyecto depende de un módulo de terceros 'bar-1.0-SNAPSHOT' que aún no se ha lanzado. Utilizo la opción 'allowTimestampedSnapshots' en pom.xml de mi proyecto para permitir instantáneas con marca de tiempo pero supongo que el módulo de terceros (barra) no tiene marca de tiempo a menos que lo construya yo mismo ya que maven todavía se queja de dependencias SNAPSHOT no resueltas.cómo lanzar un proyecto que depende de un proyecto SNAPSHOT de terceros en maven

¿Hay alguna forma de liberar el proyecto foo independientemente de los proyectos SNAPSHOT dependientes y, en caso negativo, cómo podría agregar una marca de tiempo al proyecto de terceros?

Respuesta

7

La respuesta corta es ver el following answer .... la respuesta larga es que puede evitarlo.

La única forma en que me he enfrentado en el pasado es para bifurcar efectivamente la biblioteca de terceros y cortar un lanzamiento yo mismo. Esto, por supuesto, es más fácil decirlo que hacerlo y es simplemente difícil si la biblioteca es grande y compleja e imposible si la biblioteca de terceros es de código cerrado. Una ruta más fácil tal vez para acercarse a la tercera parte y pedirles que corten un lanzamiento.

Otra opción puede ser copiar su pom (asegúrese de que no tiene instantáneas) cambiar la información de la versión e instalar manualmente el pom y el artefacto en su repositorio.

+5

No exactamente, vea las otras respuestas, puede decirle a maven a través de '-DignoreSnapshots = true' para liberar incluso con dependencias de instantáneas. Que deberías evitar hacer eso y solo hacerlo si no hay absolutamente ninguna otra opción, es otra historia. –

+0

El consejo de Sonatype es implementar en un repositorio local http://blog.sonatype.com/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/#.UstQinlq5t0 –

-2

Simplemente instale la jarra con un pom que tenga. En general, cambio el ID de grupo y artefacto para dejar en claro que esta no es la versión oficial, pero que generalmente es la mejor solución para su problema.

6

La respuesta anterior sugería cambiar el ID de grupo y artefacto ... no haga esto ya que maven no lo reconocerá como el mismo artefacto más adelante cuando se libere esta dependencia y terminará con dos copias en el classpath. Mi método preferido es cambiar solo la versión y haré algo como: [versión original] - [mi nombre de organización] - [la versión svn la saqué], así que obtengo algo como 1.0-SONATYPE-3425. Al usar el svn rev, siempre puedo volver a conectar la fuente y aplicarle un parche si es necesario y saber exactamente lo que estoy usando sin tener que extraer toda la fuente en mi propio svn.

Actualización - I blogged sobre esto hace un tiempo.

138

El problema está en el nombre del parámetro allowTimestampedSnapshots, está en la documentación pero el origen del complemento usa un nombre de parámetro diferente en la expresión - ignoreSnapshots.

Así que solo use -DignoreSnapshots=true y el objetivo de preparación del complemento de lanzamiento ignorará las dependencias de instantáneas.

+8

Esto funciona y yo cree que es la respuesta correcta (la que el OP está buscando). Es una pena que no tenga suficientes votos para ser no. 1! Por supuesto, realmente no desea publicar artefactos que tengan dependencias de instantáneas, ya que sus consumidores también necesitarán encontrar esa instantánea. Si solo está usando la instantánea en su banco de pruebas (o similar), entonces "-DignoreSnapshots = true" es definitivamente una buena solución. – joelittlejohn

+1

¡Casi me rindo hasta que tropecé con esto! ¡Gracias! –

12

El uso de la opción de liberación experto-plugin

-DignoreSnapshots=true 

en lugar de

-DallowTimestampedSnapshots=true 

ayudado en mi caso, esto permitirá utilizar las dependencias de la versión instantánea para preparar y llevar a cabo un comunicado.

Esta opción debe manejarse con mucho cuidado, ya que el uso de versiones de instantáneas en una versión puede interrumpir su lanzamiento, si se actualiza la instantánea, que en el caso normal no es lo que desea.

Cuestiones relacionadas