plugin java maven release snapshot

java - plugin - maven snapshot



Maven se despliega en una instantánea en lugar de lanzar (5)

Estoy tratando de lanzar un proyecto usando maven, pero en lugar de lanzarlo al repositorio de lanzamientos lo pone en nuestro repositorio de instantáneas.

Mi pom se parece a

<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>


Caída de este problema con una causa diferente ... ¡asegúrese de que el complemento de versión esté comprobando una etiqueta, y no una rama con el mismo nombre!

Simplemente me equivoqué de esto ... creé una rama llamada "1.9.0" en la que realizar mi lanzamiento, y luego ejecuté el lanzamiento de mvn: prepare, que también creó una etiqueta "1.9.0". Cuando mvn release: perform corrió realizó un git checkout de "1.9.0, y terminó recogiendo el HEAD de la rama 1.9.0, que, por supuesto, tenía un SNAPSHOT (1.10-SNAPSHOT).

Esas dos horas de mi vida no volveré ... En el futuro, añadiré un sufijo "-release" al nombre de la sucursal (por ejemplo, "1.9.0-release").


El POM muestra que el número de versión es una versión SNAPSHOT. Entonces, si ejecutó mvn deploy con el POM en este estado, naturalmente implementaría una instantánea en el repositorio de instantáneas.

Para realizar un lanzamiento, debe utilizar los objetivos del complemento de lanzamiento .

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


En caso de que alguien más tenga este problema y encuentre que las respuestas existentes no resuelven sus problemas:

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

Aquí está el defecto más reciente responsable de este comportamiento: MRELEASE-875 (afecta a 2.5, corregido en 2.5.1)


Si los problemas persisten, probablemente estén relacionados con la versión de maven-release-plugin que está especificando en el pom principal. La especificación del 2.2.2 del plugin de liberación de maven definitivamente falla y solo desplegará una instantánea (bajo ciertas condiciones aún no se ha explicado completamente). Sin embargo, el último complemento (es decir, eliminar la etiqueta del archivo pom.xml) funciona.


<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, está utilizando la misma ID para tres repositorios diferentes. Maven administra estos repositorios por ID, ¡por lo que cada ID debe ser única! Por ejemplo, use "nexus-releases", "nexus-snapshots" y "nexus".