java - library - ¿Orden de construcción del proyecto multimodular Maven?
maven parent pom example (3)
Últimamente he estado viviendo este problema con Centos 7. Actualicé maven a 3.5.3 desde 3.0.5 y este problema se ha resuelto. Si alguien tiene este problema, intente eso primero.
La situación es que tengo dos proyectos de multimódulo Maven con la misma estructura:
Parent - Module 1 - Module 2
Cuando construyo el proyecto 1, veo que el padre se construye primero (el orden es parent-> module1-> module2 ). Sin embargo, para el proyecto 2, el padre está construido al fin (el pedido es module1-> module2-> parent ). ¿Por qué los dos proyectos tienen diferentes órdenes de compilación? Además, ¿cómo puedo controlar manualmente el orden de compilación?
Actualización 1:
Ambos proyectos principales son simples proyectos POM sin código fuente, por lo que no puedo explicar el orden de compilación según el gráfico de dependencia.
Actualización 2:
Los POM principales son los mismos, excepto los nombres de los módulos GAV y secundarios:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>parent-group-id</groupId> <artifactId>parent-artifact-id</artifactId> <version>parent-version</version> <packaging>pom</packaging> <name>parent-name</name> <modules> <module>module-1</module> <module>module-2</module> </modules> </project>
El orden de compilación está determinado por el reactor Maven, que es un mecanismo que garantiza automáticamente el orden de construcción correcto para las compilaciones de los multíforos clasificando los proyectos.
Vea la documentación oficial de cómo funciona.
Dice:
Las siguientes relaciones se respetan cuando se ordenan proyectos:
- una dependencia del proyecto en otro módulo en la construcción
- una declaración de complemento donde el complemento es otros módulos en la compilación
- una dependencia de complemento en otro módulo en la compilación
- una declaración de extensión de compilación en otro módulo en la compilación
- el orden declarado en el elemento (si no se aplica ninguna otra regla)
No puedes controlar manualmente el orden de compilación. Si desea cambiar el orden, debe realizar cambios en su proyecto que influyan en el orden de clasificación del reactor.
En un nivel alto, el orden de compilación se basa en un tipo topológico del gráfico de dependencia del módulo.
EDIT: pregunta para ti. Entiendo que el proyecto 1 contiene dos módulos y también lo hace el proyecto 2. ¿Pero los módulos en el proyecto 2 declaran explícitamente el padre "padre" como padre? Estoy pensando que quizás sus módulos de proyecto 1 declaren explícitamente el pom padre, y los módulos del proyecto 2 no lo hagan explícitamente. Lo que significaría que el proyecto 2 "padre" no es realmente un padre en absoluto y, por lo tanto, no tiene que construirse antes de los módulos. Esa es mi suposición de todos modos.