Pregunta

Déjame decir esto primero:Soy nuevo en Maven.Dicho esto, busqué pero no encontré respuestas a la siguiente pregunta.Encontré respuestas a preguntas similares, pero no a este escenario.O tal vez simplemente entendí mal las respuestas y esto se puede resolver simplemente con una configuración de múltiples módulos.

Tendría la siguiente jerarquía de dependencia:

database
|  |
|  +---core
|      |  |
|      |  +---business 
|      |        |
|      |        +------App1
|      |        |
|      |        +------App2
|      |
|      +---------------App3
|
+----------------------App4

Me gustaría hacerlo funcionar para que los cambios solo resulten en nuevas versiones de cualquier módulo/aplicación "ascendente".¿Es este realmente un caso simple de configuración de Maven de múltiples módulos o necesito hacer algo más?

¿Fue útil?

Solución

Si desea que la liberación de un componente produzca una nueva versión de cada proyecto, simplemente use : http://maven.apache.org/maven-release/maven-release-plugin/.

Documentación

Según el documento, esto sería:

  • Compruebe que no haya cambios no confirmados en las fuentes.
  • Compruebe que no haya dependencias de SNAPSHOT
  • Cambie la versión en los POM de x-SNAPSHOT a una nueva versión (se le preguntará qué versiones utilizar)
  • Transforme la información de SCM en el POM para incluir el destino final de la etiqueta.
  • Ejecute las pruebas del proyecto con los POM modificados para confirmar que todo está funcionando correctamente.
  • Confirmar los POM modificados
  • Etiquete el código en el SCM con un nombre de versión (se le solicitará esto)
  • Cambie la versión en los POM a un nuevo valor y-SNAPSHOT (también se solicitarán estos valores)
  • Confirmar los POM modificados

Debido a la estructura de múltiples módulos de Maven, están vinculados entre sí y cada proyecto pasaría a una nueva versión.

En pocas palabras, esto:

  • mover versión 1.0-INSTANTÁNEA --> 1.1-INSTANTÁNEA
  • etiqueta 1.0
  • generar 1.0.jar (ya sea guerra o cualquier otra cosa)

Uso de complementos

Suponiendo que SCM esté correctamente definido y configurada la gestión del repositorio y la distribución, simplemente agregue estas líneas

<project>
  [...]
  <build>
    [...]
    <plugins>
      [...]
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>2.4.2</version>
        <!-- optional, basic format is ${project.artifactId}-${project.version}.${project.type}-->
        <configuration>
          <tagNameFormat>v@{project.version}</tagNameFormat>
        </configuration>
      </plugin>
      [...]
    </plugins>
    [...]
  </build>
  [...]
</project>

Y llama

mvn release:prepare
mvn release:perform

Herencia vs Dependencia

Puede considerar los dos enfoques diferentes de Maven:

  • herencia, eso significa padres y módulos múltiples/sub
  • agregación, en otras palabras:uso de dependencias

En un proyecto multimaven, todos sus módulos, incluido el principal, comparten el mismo ciclo de vida.Liberar uno implica liberar todos, por lo que liberar solo uno no tiene sentido.

En su caso, no puede modificar las aplicaciones 1 a 3 sin afectar la aplicación 4.Si la aplicación 4 depende de la aplicación 1, obviamente la aplicación 1 no puede depender de la aplicación 4 (no se permiten referencias circulares).

Por lo tanto, si desea aislar App4 y App1 en 3 ciclos de vida, no debe usar módulos múltiples, sino simplemente compartir un proyecto principal o una jerarquía de pom como corporativo > proyecto principal > subproyecto (no submódulo).Después de eso, simplemente declara una dependencia entre la Aplicación 4 y la Aplicación 1.(...en app4 pom.xml)

Sólo otro pensamiento:el nombre de tus proyectos y submódulos suena extraño.La jerarquía "clásica" suele ser (considerando el dominio de múltiples objetos comerciales para un proyecto grande):

Main Project (sometimes EAR) --> POM 
|-- Business Object / DAO --> POM
|   |-- Domain 1 --> JAR
|   `-- Domain 2 --> JAR
|-- Core (depends on BO)  --> JAR
`-- IHM / Web App (depends on core)  --> WAR

Por lo tanto, la base de datos rara vez se encuentra en la cima de la jerarquía.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top