2011-07-17 13 views
28

Estoy intentando lanzar un proyecto maven de múltiples módulos que usa git como SCM, y uno de los primeros problemas que he encontrado es la forma en que el complemento maven libera the release.properties scm.url. Mi padre POM es como la siguiente:Lanzamiento de un proyecto maven de varios módulos con Git

<packaging>pom</packaging> 
<groupId>org.project</groupId> 
<artifactId>project-parent</artifactId> 
<version>1.0.0-SNAPSHOT</version> 

<scm> 
    <connection>scm:git:git://github.com/username/project.git</connection> 
    <developerConnection>scm:git:[email protected]:username/project.git</developerConnection> 
    <url>http://github.com/username/project</url> 
</scm> 

<modules> 
    <module>api</module> 
    <module>spi</module> 
</modules> 

Y las POM módulo son sencillos:

<parent> 
    <groupId>org.project</groupId> 
    <artifactId>project-parent</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
</parent> 
<artifactId>api</artifactId> 
<version>0.2.2</version> 

Mi objetivo es ser capaz de liberar los módulos individuales, ya que cada uno tiene diferentes versiones y no hacer quiero incrementar todas las versiones juntas cada vez que hago un lanzamiento.

Cuando cambio en el directorio api y hacer un mvn release:clean release:prepare me encontré con el siguiente resultado:

[INFO] Executing: cmd.exe /X /C "git push [email protected]:username/project.git/api master:master" 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Unable to commit files 
Provider message: 
The git-push command failed. 
Command output: 
ERROR: Repository not found. 

Parece que el plugin liberación experto crea la scm.url añadiendo el nombre del módulo a la developerConnection, que termina no siendo un repositorio válido en github. No estoy seguro de cuál es la forma correcta de configurar esto. Puede ser que Maven + git + liberando un módulo hijo individual simplemente no funcione? Cualquier entrada es apreciada.

Respuesta

14

Para ver cómo hacer este trabajo, echar un vistazo a un ejemplo de trabajo, tales como:

https://github.com/sonatype/sonatype-aether

Sin embargo, esto no ayudará si te gusta para liberar las piezas individuales. En ese caso, solo tiene que copiar los elementos <scm> en todos los poms.

Este es un tema activo de discusión en la lista de desarrolladores maven, pero no contenga la respiración para encontrar una solución a partir de ahí; tiene mucha importancia.

+2

Parece que los lanzamientos de proyectos desde el POM de nivel superior en lugar de liberarlos de los módulos individuales como lo estoy tratando de hacer. El problema que tengo aparece cuando intento liberar desde el directorio de uno de los módulos. Es importante para mí poder lanzar módulos individuales ya que las versiones de los módulos son diferentes y no quiero incrementar todas las versiones de los módulos al mismo tiempo. –

+1

Nunca he visto a nadie hacer eso. – bmargulies

+0

Gracias por la información. ¿Tiene enlaces a cualquiera de los hilos en la lista de desarrolladores maven donde esto ha sido discutido? –

10

Encontré esta pregunta con una búsqueda en "comando git-push fallido". Tengo una configuración similar donde tengo un master-pom y luego submódulos que lanzo como sus propios paquetes maven.

Para que funcione, tuve que sintonizar la sección scm del pom.xml a algo como lo siguiente. Las conexiones específicamente tenían que estar ajustadas para funcionar. Ninguno de los github funcionaba en absoluto.

<scm> 
    <url>https://github.com/XXX/YYY</url> 
    <connection>scm:git:ssh://[email protected]/XXX/YYY.git</connection> 
    <developerConnection>scm:git:ssh://[email protected]/XXX/YYY.git</developerConnection> 
</scm> 

El XXX en el ejemplo anterior es su nombre de usuario GitHub. No puede usar el formato :XXX ([email protected]:XXX/...) porque el valor pasado el : se interpreta como un número de puerto. El YYY es obviamente su nombre de repositorio bajo la cuenta XXX.

Acabo de lanzar los 3 submódulos uno a uno utilizando este patrón con éxito.

+0

Estas URL me funcionaron. muchas gracias ! – Cristiano

1

Estuve tratando de hacer algo similar durante mucho tiempo, y nunca encontré una buena solución, así que escribí mi propio complemento de lanzamiento para git. Solo libera módulos modificados, no necesita ninguna configuración scm, etiquetas basadas en los nombres de los módulos y las dependencias entre componentes funcionan.

Documentación: http://danielflower.github.io/multi-module-maven-release-plugin/index.html

Introducción blog: http://danielflower.github.io/2015/03/08/The-Multi-Module-Maven-Release-Plugin-for-Git.html

0

Una manera simple, lo que funcionó para mí es el uso de las propiedades de los padres en los módulos pom.xml como seguimiento de la etiqueta scm como sigue:

<!--module pom.xml--> 
<scm> 
    <connection>${project.parent.scm.connection}</connection> 
    <developerConnection>${project.parent.scm.developerConnection}</developerConnection> 
</scm> 
Cuestiones relacionadas