2012-06-21 60 views
33

La situación es que tengo dos proyectos Maven varios módulos con la misma estructura:¿Orden de compilación del proyecto de multimódulo Maven?

 
Parent 
    - Module 1 
    - Module 2 

Cuando construyo el proyecto 1, veo que los padres se construye primero (orden es padre-> module1-> modulo2) . Sin embargo, para el proyecto 2, el padre se compila 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 son proyectos de padres POM simples sin código fuente, por lo que no pueden explicar el orden de construcción de acuerdo con el gráfico de la dependencia.

Actualización 2:
Los POM padres son los mismos, excepto los nombres GAV y módulos niño:

 
<?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> 
+0

Posible duplicado de [Imposible crear orden para un proyecto múltiple en Maven] (http://stackoverflow.com/questions/6593503/impose-build-order-for-a-multi-project-in-maven) – nullpointer

Respuesta

24

El orden de construcción se determina por el reactor de Maven que es un mecanismo que asegura automáticamente la acumulación correcta orden para compilaciones de multimódulos clasificando los proyectos.

Consulte the official documentation para ver cómo funciona.

Dice:

Las siguientes relaciones son honrados al ordenar los proyectos:

  • una dependencia proyecto en otro módulo en la construcción
  • una declaración plug-in, donde el plugin es otro de los módulos en la compilación
  • una dependencia de complemento en otro módulo en la compilación
  • una compilación extens Declaración de iones de otro módulo en la construcción
  • el fin declarado en el elemento (si no se aplica ninguna otra regla)

No se puede controlar manualmente el orden de construcción. Si desea cambiar el orden, debe realizar cambios en su proyecto que influyan en el orden de clasificación del reactor.

+0

Pero esto no explica por qué los dos proyectos tienen diferentes órdenes de compilación. –

+1

¿Podría compartir sus poms? –

+0

Consulte la actualización 2. –

9

En un nivel alto, el orden de compilación se basa en un topological sort del gráfico de dependencia del módulo.

EDIT: Pregunta para usted. 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.

+0

Pero ambos proyectos principales son simples proyectos POM sin ningún código fuente. El gráfico de dependencia no tiene sentido aquí. –

Cuestiones relacionadas