2011-09-07 12 views
18

Estoy intentando lanzar un proyecto usando maven, pero en lugar de liberarlo al repositorio de Releases, lo coloca en nuestro repositorio de instantáneas.Maven se implementa en una instantánea en lugar de la versión

Mi pom parece:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
          http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.example.my.profiler</groupId> 
<artifactId>profilerlib</artifactId> 
<name>Profiler Lib</name> 
<version>1.0.2-SNAPSHOT</version> 
<description>Profiler Library</description> 
<scm> 
    <connection>scm:svn:https://svn.example.com/my-project/profilerlib/trunk 
    </connection> 
    <developerConnection>scm:svn:https://svn.example.com/my-project/profilerlib/trunk 
    </developerConnection> 
</scm> 
<distributionManagement> 
    <!-- Publish the versioned releases here --> 
    <repository> 
     <id>nexus</id> 
     <name>nexus</name> 
     <url>http://repo.example.com:8081/nexus/content/repositories/releases 
     </url> 
    </repository> 
    <!-- Publish the versioned releases here --> 
    <snapshotRepository> 
     <id>nexus</id> 
     <name>nexus</name> 
     <url>http://repo.example.com:8081/nexus/content/repositories/snapshots 
     </url> 
    </snapshotRepository> 
</distributionManagement> 
<!-- download artifacts from this repo --> 
<repositories> 
    <repository> 
     <id>nexus</id> 
     <name>EXAMPLE Public Repository</name> 
     <url>http://repo.example.com:8081/nexus/content/groups/public</url> 
     <releases> 
      <enabled>true</enabled> 
     </releases> 
     <snapshots> 
      <enabled>true</enabled> 
     </snapshots> 
    </repository> 
</repositories> 
<dependencies> 
    ... 
</dependencies> 
<build> 
    <finalName>${project.artifactId}</finalName> 
    <plugins> 
     <plugin> 
      <artifactId>maven-release-plugin</artifactId> 
      <configuration> 
       <tagBase>https://svn.example.com/my-project/profilerlib/tags 
       </tagBase> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <powermock.version>1.4.6</powermock.version> 
</properties> 
</project> 
+0

Encontraste un solución para este problema? – mihn

+0

Hace mucho tiempo, pero IIRC tuve que definir los valores de ID de repositorio y snapShotRepository por separado en mi pom.xml. –

Respuesta

11
<repository> 
    <id>nexus</id><!--etc--> 
</repository> 
<snapshotRepository> 
    <id>nexus</id><!--etc--> 
</snapshotRepository> 
<!-- etc --> 
<repositories> 
    <repository> 
     <id>nexus</id> 
     <!-- etc --> 
    </repository> 
</repositories> 

Este es el problema, que está utilizando el mismo ID de tres depósitos diferentes. Maven administra estos repositorios por ID, ¡así que cada ID debe ser única! P.ej. utilice "nexus-releases", "nexus-snapshots" y "nexus".

+0

Gracias por la sugerencia, lo intenté pero sigo teniendo el mismo problema. ¿Ayuda de salida de Maven? –

+3

¿por qué es esta la respuesta aceptada si no resolvió el problema? – Ken

+0

@Ken ambas respuestas son válidas, solo muestran dos aspectos diferentes de lo que puede ser el problema. quizás los dos juntos resolvieron el problema? –

12

El POM muestra el número de versión para ser una versión SNAPSHOT. Por lo tanto, si ejecutó mvn deploy con el POM en este estado, implementaría naturalmente una instantánea en el repositorio de instantáneas.

Para hacer un lanzamiento, debe utilizar los objetivos del release plugin.


Por otro lado, tal vez ya lo sepas, y la respuesta real está en la respuesta de Sean Patrick Floyd.

+0

Jaja, pasé por alto lo obvio (+1) !! –

+0

Estoy ejecutando: mvn release: prepare release: realice NO mvn deploy. Por lo que entiendo, el complemento de lanzamiento debe eliminar el sufijo -SNAPSHOT antes de implementar, ¿no? –

+1

@ user932509 debe ejecutar prepare y realizar en dos pasos separados, porque dudo que preparar cambie la versión del artefacto de ejecución en ejecución (que sería malo) –

19

En caso de que alguien más está teniendo este problema y encontrar las respuestas existentes no resuelven sus problemas:

Ha habido un puñado de errores que hacen imposible, release:prepare no se compromete con el repositorio git antes de crear la etiqueta de versión . Esto significa que el número de versión en los archivos pom que encuentra el release:perform contiene -SNAPSHOT y el implementador intentará liberarlo al repositorio de instantáneas.

Esta es la más reciente de defectos responsables de este comportamiento: MRELEASE-875 (afecta a 2,5, fijado en 2.5.1)

+0

¡Este era exactamente mi problema, gracias! Por alguna razón, Maven estaba recogiendo la versión 2.5 descompuesta; forzándolo a elegir 2.5.1 (http://mvnrepository.com/artifact/org.apache.maven.plugins/maven-release-plugin/2.5.1) especificando la versión en el POM que lo resolvió. –

+0

¡Solo confirme eso! muchas gracias. Encontré [una página de ayuda] (https://maven.apache.org/guides/mini/guide-releasing.html) que muestra la versión '2.5' de' maven-release-plugin'. Acabo de enviar un correo electrónico a [ML] (http://mail-archives.apache.org/mod_mbox/maven-users/201507.mbox/thread) para pedirles que actualicen esta página. – boly38

2

falta Fell de este problema con una causa diferente ... asegurarse de que la liberación-plugin es revisando una etiqueta, ¡y no una rama con el mismo nombre!

Me acabo de echar a perder ... Creé una rama llamada "1.9.0" en la cual hacer mi versión, y luego ejecuté la versión mvn: prepare, que también creó una etiqueta "1.9.0". Cuando mvn release: perform ran hizo un checkout de git de "1.9.0, y terminó recogiendo HEAD de la rama 1.9.0, que, por supuesto, tenía una SNAPSHOT (1.10-SNAPSHOT).

Eso es dos horas de mi vida que no volveré ... En el futuro, voy a agregar un sufijo "-release" al nombre de la rama (por ejemplo, "1.9.0-release").

Cuestiones relacionadas