2010-09-08 16 views
9

tengo un proyecto de módulo múltiple (estructura plana) de la siguiente maneraCómo liberar un proyecto multi-módulo con dependencias no liberados

 
parentpom (1.1-SNAPSHOT) 
moduleA (inherits parentpom version, depends on moduleB(1.1-SNAPSHOT)) 
moduleB (inherits parentpom version) 
aggregator (inherits parentpom version, aggregates moduleA, moduleB) 

El agregador me permite construir, instalar y desplegar moduleA y moduleB al mismo tiempo, y parece hacer lo que espero.

Cuando intento y hacer un lanzamiento de la versión 1.1, no puedo porque moduleA depende de moduleB (1.1-SNAPSHOT), dando como resultado el siguiente error: "No se puede liberar proyecto debido a las dependencias de los no liberados"

Pensé que usar el agregador me permitiría hacer una versión "sincronizada" del móduloA y del móduloB, actualizando automáticamente el móduloA para que dependa del móduloB (1.1). ¿Cuál sería la forma correcta de lograr esto?

Gracias

Respuesta

2

How to release a multi-module project with non released dependencies

Para responder a esta pregunta estrictamente, esto no es posible, al menos no con el lanzamiento de Maven Plugin. Y si no usas el complemento Maven Release y lo haces manualmente, no deberías hacer eso de todos modos.

Motivo: la compilación de un lanzamiento debe ser repetible, construirla más tarde desde sus fuentes debe dar exactamente el mismo resultado. Tener algunas dependencias SNAPSHOT en algún POM lanzado derrota por completo este objetivo. Por eso, el complemento de lanzamiento de Maven hace cumplir esto.

I thought that using the aggregator would allow me to do a "synchronised" release of moduleA and moduleB, automatically updating moduleA to depend on moduleB(1.1). What would be the correct way of achieving this?

¿Las versiones están codificadas de forma rígida? Si lo son, este podría ser el problema.

  • moduleB y moduleA no deben declarar cualquier versión, que heredan de la madre POM

  • moduleA debe utilizar el incorporado en las propiedades de declarar su dependencia de B

    <dependency> 
        <groupId>${project.groupId}</groupId> 
        <artifactId>moduleB</artifactId> 
        <version>${project.version}</version> 
    </dependency> 
    
+0

Sólo para estar seguro de que lo reciba correctamente, con _moduleB y moduleA no debe declarar cualquier versión, se heredan de los padres POM_, quieres decir en la sección de dependencias, ¿verdad? es decir, moduleA todavía tiene un elemento ' X.X-SNAPSHOT'. Si no, estoy haciendo algo mal ... – Alberto

0

Me encontré con un problema similar y la primera respuesta en this thread helped me (see also the example code that is linked)

La respuesta es básicamente agregar todos los módulos a la administración de dependencias del pom padre y luego eliminar cualquier información de versión de las dependencias "intermódulo" en los módulos.

p. Ej.

pom padres:

<dependencyManagement> 
     <dependencies> 
      <dependency> 
      <groupId>some_group</groupId> 
      <artifactId>module_A</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
      <dependency> 
      <groupId>some_group</groupId> 
      <artifactId>module_B</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

módulo A:

<dependencies> 
      <dependency> 
      <groupId>some_group</groupId> 
      <artifactId>module_B</artifactId> 
     </dependency> 
    </dependencies> 
Cuestiones relacionadas