SCM URL relativa a la URL principal de SCM en POM

Tengo un proyecto Maven hecho de varios modules y submodules. Yo uso SVN para versionar los files fuente.

La historia corta

¿Cómo especifico la URL en las properties scm de un file POM, que son relativas a las de su padre?

La larga historia

Algunos modules y sus submodules comparten un process de versión / número de versión común, y algunos usan versiones independientes. Para el module con número de versión independiente, configuré un layout branches / trunk / tags, para que el complemento de publicación sea feliz.

Para eso, tengo dos layouts SVN en mi repository. Uno contiene todos los problemas de tronco / twigs / tags, el otro contiene un directory de trabajo limpio listo para el check-out con svn: references externas a los troncos.

Esto se ve así; Tienes el layout de SVN en el mundo real, con el problema trunk / branches / tags:

  • pom.xml (principal padre)
  • utils
    • twigs
    • tags
    • el maletero
      • pom.xml , src, target, etc …
  • model de datos ( publicado )
    • twigs
    • tags
    • el maletero
      • pom.xml
      • lib
        • pom.xml , src, target, etc …
      • server
        • pom.xml , src, target, etc …
      • cliente
        • pom.xml , src, target, etc …
  • bin-modules
    • bin-module-1 ( liberado )
      • twigs
      • tags
      • el maletero
        • pom.xml , src, target, etc …
    • bin-module-2 ( liberado )
      • twigs
      • tags
      • el maletero
        • pom.xml , src, target, etc …

Y el layout limpio del directory de trabajo, ocultando las twigs / cosas del tronco con las tags "svn: externals":

  • pom.xml (principal padre)
  • utils (-> utils / trunk )
    • pom.xml , src, target, etc …
  • model de datos (-> model-datos / troncal )
    • pom.xml
      • lib
        • pom.xml , src, target, etc …
      • server
        • pom.xml , src, target, etc …
      • cliente
        • pom.xml , src, target, etc …
  • bin-modules
    • pom.xml
    • bin-module-1 (-> bin-module-1 / trunk )
      • pom.xml , src, target, etc …
    • bin-module-2 (-> bin-module-2 / trunk )
      • pom.xml , src, target, etc …

Hasta aquí todo bien. He configurado las URL de SCM de la raíz en mi POM principal, y Maven implica correctamente las URL para los submodules. Lo he comprobado con mvn help:effective-pom

Tengo las siguientes urls scm:

  • root : [root-url]
  • utils : [root-url] / utils
  • model de datos : [root-url] / data-model /
  • data-model / lib : [root-url] / data-model / lib
  • data-model / client : [root-url] / data-model / client
  • model de datos / server : [root-url] / data-model / server
  • bin-module-1 : [root-url] / bin-module-1 /
  • bin-module-2 : [root-url] / bin-module-2 /

Pero Maven no está al tanto del layout SVN real. Me gustaría que vea:

  • root : [root-url]
  • utils : [root-url] / utils / trunk
  • model de datos : [root-url] / data-model / trunk
  • data-model / lib : [root-url] / data-model / trunk / lib
  • data-model / client : [root-url] / data-model / trunk / client
  • model de datos / server : [root-url] / data-model / trunk / server
  • bin-module-1 : [root-url] / bin-module-1 / trunk
  • bin-module-2 : [root-url] / bin-module-2 / trunk

Para eso, necesito agregar una sección scm al pom.xml de data-model , bin-module-1 y bin-module-2 .

He intentado algo como (para el model de datos):

 <scm> <connection>./data-model/trunk</connection> <developerConnection>./sdr/trunk</developerConnection> <url>./sdr/trunk</url </scm> 

O

 <scm> <connection>${project.parent.scm.connection}/data-model/trunk</connection> <developerConnection>${project.parent.scm.developerConnection}/data-model/trunk</developerConnection> <url>${project.parent.scm.url}/data-model/trunk</url> </scm> 

Pero ninguno parece funcionar. Las properties $ {…} ni siquiera se reemplazan. Entonces, ¿cómo puedo anular una ruta SCM, en relación con su URL principal SCM?

Cualquier ayuda, consejo, sería muy apreciada.

Gracias de antemano, Raphael

Hubiera pensado que esto funciona:

 <scm> <connection>${project.parent.scm.connection}/data-model/trunk</connection> <developerConnection>${project.parent.scm.developerConnection}/data-model/trunk</developerConnection> <url>${project.parent.scm.url}/data-model/trunk</url> </scm> 

Si no es así, aún existe la posibilidad de asignar estos valores mediante progtwigción ( usaré GMaven para hacer eso, pero también puedes usar el plugin antrun o escribir un plugin personalizado)

Primero, establezca una propiedad

 <properties> <relativeScmPath>data-model/trunk</relativeScmPath> </properties> 

A continuación, asigne un desplazamiento relativo a todas las properties de SCM:

 <plugin> <groupId>org.codehaus.gmaven</groupId> <artifactId>gmaven-plugin</artifactId> <version>1.3</version> <executions> <execution> <id>assign-scm</id> <phase>validate</phase> <goals> <goal>execute</goal> </goals> <configuration> <source> <![CDATA[ def parentScm = project.parent.scm; def thisScm = project.scm; def relPath = project.properties['relativeScmPath']; ['connection','developerConnection','url'].each{ thisScm[it] = parentScm[it] + relPath; } ]]> </source> </configuration> </execution> </executions> </plugin> 

Puede agregar esto al pom raíz y cambiarlo para que se ejecute solo si encuentra la propiedad, y luego puede establecer automáticamente el valor para n submodules simplemente agregando la propiedad a ellos.