que mvn introduccion hace estructura ejemplo conceptos clean basicos maven-2 maven

maven-2 - introduccion - mvn clean install que es



¿Cómo excluir un módulo de una construcción de reactor Maven? (6)

Tenemos un proyecto Maven 2 con muchos módulos. Ejemplo:

<modules> <module>common</module> <module>foo</module> <module>data</module> <module>bar</module> ... more ... </module>

Digamos que el módulo de "datos" lleva mucho tiempo construir y queremos excluirlo cuando el proyecto es creado por un servidor de CI. Actualmente usamos dos archivos pom.xml para lograr esto. Uno tiene todos los módulos y el otro tiene todos los módulos, excepto los que pueden dejarse para CI. Pero eso es bastante molesto porque a veces olvidamos poner un nuevo módulo en ambos archivos.

¿Hay una solución que no necesita dos listas de módulos por separado?


Con Maven 3.2.1, ahora puede usar -pl !<module_name>,!<module_name> para excluir ciertos módulos de la compilación del reactor.

Vea esta solicitud de función: https://jira.codehaus.org/browse/MNG-5230


Lo más fácil podría ser usar profiles como este:

<project> ... <modules> <module>common</module> <module>foo</module> <module>bar</module> <modules> ... <profiles> <profile> <id>expensive-modules-to-build</id> <modules> <module>data</module> </modules> </profile> </profiles> </project>

Debería verificar formas en que puede activar perfiles


Los proyectos para construir también se pueden especificar en la línea de comando mvn. Esto eliminaría la necesidad de un pom separado, pero en su lugar tendría que cambiar la configuración de CI cada vez que hay un nuevo módulo.

-pl,--projects <arg> Comma-delimited list of specified reactor projects to build instead of all projects. A project can be specified by [groupId]:artifactId or by its relative path.

Tal vez una combinación de esta bandera y --also-make-dependents o - --also-make reduciría nuevamente esta carga de mantenimiento.

-am,--also-make If project list is specified, also build projects required by the list -amd,--also-make-dependents If project list is specified, also build projects that depend on projects on the list


Otra idea: los módulos Reactor se pueden anidar, por lo que debería ser posible agrupar los módulos rápidos y de construcción lenta en poms separados y luego agregar otro agregador pom que contenga estos dos módulos. Su servidor CI solo podría hacer referencia al pom que contiene los módulos de construcción rápida.

<artifactId>fast</artifactId> <modules> <module>fast-a</module> <module>fast-b</module> <module>fast-c</module> </module> <artifactId>all</artifactId> <modules> <module>fast</module> <module>slow</module> </module>


Podrías usar profiles maven. En nuestro entorno de compilación, creamos un perfil quick que deshabilita muchos complementos y ejecuta la prueba.

Esto es hecho por

<profile> <id>quick</id> <properties> <skipTests>true</skipTests> <!-- others... --> </properties> <build> <plugins> <!-- configuration... --> </plugins> </build> </profile>

Y luego invocamos a maven de la siguiente manera

mvn groupId:artifactId:goal -P quick

Tal vez pueda deshabilitar la compilación y otros complementos estándar en el pom de su módulo para acelerarlo.


Supongo que quieres que la compilación predeterminada siempre genere todo, independientemente de la velocidad, para que los nuevos desarrolladores puedan comenzar rápidamente sin tener que entender mucho sobre el POM. Puede usar perfiles como este:

<modules> <module>common</module> <module>foo</module> <module>bar</module> </modules> ... <profiles> <profile> <id>expensive-modules-to-build</id> <activation> <activeByDefault>true</activeByDefault> </activation> <modules> <module>data</module> </modules> </profile> </profiles> </project>

El problema con esto es que si un desarrollador especifica otro perfil en la línea de comando, entonces el expensive-modules-to-build no está incluido (a menos que el desarrollador también lo especifique). Esto hace que sea complicado recordar qué perfiles deben incluirse.

Aquí hay un truco de eso. Ambos perfiles están siempre incluidos, porque el archivo pom.xml siempre existe. Entonces, para excluir los costosos módulos, puede usar -P!full-build en la línea de comando.

<profiles> <profile> <id>full-build</id> <activation> <file> <exists>pom.xml</exists> </file> </activation> <modules> <module>data</module> </modules> </profile> <profile> <id>short-build</id> <activation> <file> <exists>pom.xml</exists> </file> </activation> <modules> <module>common</module> <module>foo</module> <module>bar</module> </modules> </profile> </profiles>