Pregunta

Me gustaría lanzar un proyecto de instantánea 'foo-1.0-SNAPSHOT' con el complemento de versión de Maven. El proyecto depende de un módulo de terceros 'bar-1.0-SNAPSHOT' que aún no se ha publicado. Utilizo la opción 'allowTimestampedSnapshots' en el archivo pom.xml de mi proyecto para permitir instantáneas con marca de tiempo, pero asumo que el módulo de terceros (barra) no tiene la marca de hora a menos que la compile yo mismo como Maven todavía se queja de las dependencias de SNAPSHOT sin resolver.

¿Hay una manera de liberar el proyecto foo independientemente de los proyectos SNAPSHOT dependientes y, de no ser así, cómo puedo agregar una marca de tiempo al proyecto de terceros?

¿Fue útil?

Solución

La respuesta corta es ver la siguiente respuesta .... la respuesta larga es que puedes solucionarlo.

La única forma en la que he hecho frente en el pasado es bifurcar de manera efectiva la biblioteca de terceros y realizar un lanzamiento yo mismo. Por supuesto, esto 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 eliminen un lanzamiento.

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

Otros consejos

El problema es con el nombre del parámetro allowTimestampedSnapshots , está en la documentación pero la fuente 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 versión ignorará las dependencias de las instantáneas.

Usando la opción maven-release-plugin

-DignoreSnapshots=true

en lugar de

-DallowTimestampedSnapshots=true

ayudado en mi caso, esto permitirá utilizar dependencias con la versión de instantánea para preparar y realizar un lanzamiento.

Esta opción debe manejarse con mucho cuidado, ya que el uso de versiones de instantáneas en una versión puede romper su versión más adelante, si se actualiza la dependencia de instantáneas, lo que en un caso normal no es lo que usted desea.

La respuesta anterior sugiere cambiar el grupo y la identificación del artefacto ... no hagas esto, ya que Maven no lo reconocerá como el mismo artefacto más tarde cuando se libere esta dependencia y terminarás con dos copias en el classpath . Mi método preferido es cambiar solo la versión y haré algo como: [versión original] - [nombre de mi organización] - [versión svn de la que saqué] así que obtengo algo como 1.0-SONATYPE-3425. Al usar svn rev, siempre puedo extraer la fuente nuevamente y parchearla si es necesario y saber exactamente lo que estoy usando sin tener que juntar toda la fuente en mi propia svn.

Actualización - I blogué sobre esto hace un tiempo atrás.

Simplemente instale el frasco con un pom de su propiedad. Por lo general, cambio el grupo y la identificación del artefacto para dejar en claro que esta no es la versión oficial, pero que generalmente es la mejor solución para su problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top