tutorial programming para homepage español descargar consola comandos maven continuous-integration jenkins

programming - maven repository



Omita un submódulo durante una construcción de Maven (5)

Tenemos la necesidad de poder omitir un submódulo en ciertos entornos.

El módulo en cuestión contiene pruebas de integración y tarda media hora en ejecutarse. Por lo tanto, queremos incluirlo cuando construimos en el servidor de CI, pero cuando los desarrolladores crean localmente (y se ejecutan las pruebas), queremos omitir ese módulo.

¿Hay alguna manera de hacer esto con una configuración de perfil? He hecho algunas búsquedas en Google y he mirado otras preguntas / respuestas aquí y no he encontrado una buena solución.

Supongo que una opción es eliminar por completo ese submódulo del pom.xml principal y simplemente agregar otro proyecto en nuestro servidor de CI para simplemente compilar ese módulo.

Sugerencias?


Claro, esto se puede hacer usando perfiles. Puede hacer algo como lo siguiente en su pom.xml principal.

... <modules> <module>module1</module> <module>module2</module> ... </modules> ... <profiles> <profile> <id>ci</id> <modules> <module>module1</module> <module>module2</module> ... <module>module-integration-test</module> </modules> </profile> </profiles> ...

En su CI, ejecutará maven con el perfil ci , es decir, mvn -P ci clean install


Es posible decidir qué proyectos de reactor construir construyendo el argumento de línea de comando -pl :

$ mvn --help [...] -pl,--projects <arg> Build specified reactor projects instead of all projects [...]

Acepta una lista de parámetros separados por comas en una de las siguientes formas:

  • ruta relativa de la carpeta que contiene el POM
  • [groupId]:artifactId

Por lo tanto, dada la siguiente estructura:

project-root [com.mycorp:parent] | + --- server [com.mycorp:server] | | | + --- orm [com.mycorp.server:orm] | + --- client [com.mycorp:client]

Puede especificar la siguiente línea de comando:

mvn -pl .,server,:client,com.mycorp.server:orm clean install

para construir todo. Elimine los elementos de la lista para compilar solo los módulos que desee.

EDITAR: como blackbuild señaló, desde Maven 3.2.1 tienes una nueva bandera -el que excluye proyectos del reactor, de forma similar a lo que hace -pl :


La noción de proyectos de varios módulos está ahí para atender las necesidades de los segmentos codependientes de un proyecto. Tal cliente depende de los servicios, que a su vez dependen de, por ejemplo, EJB o rutinas de acceso a datos. Puede agrupar sus pruebas de integración continua (CI) de esta manera. Lo racionalizaría diciendo que las pruebas de CI deben estar en paso de bloqueo con los cambios en la lógica de la aplicación.

Supongamos que su proyecto está estructurado como:

project-root | + --- ci | + --- client | + --- server

El project-root/pom.xml define los módulos

<modules> <module>ci</module> <module>client</module> <module>server</module> </modules>

El ci/pom.xml define perfiles tales como:

... <profiles> <profile> <id>default</id> <activation> <activeByDefault>true</activeByDefault> </activation> <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </profile> <profile> <id>CI</id> <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>false</skip> </configuration> </plugin> </profile> </profiles>

Esto dará como resultado pruebas de omisión de Maven en este módulo, excepto cuando el perfil llamado CI esté activo. Su servidor CI debe recibir instrucciones para ejecutar mvn clean package -P CI . El sitio web de Maven tiene una explicación detallada del mecanismo de creación de perfiles .


Maven versión 3.2.1 agregó esta característica, puede usar el modificador -pl con el "!" excluir ciertos submódulos

mvn -pl ''!submodule-to-exclude'' install

¡Ten cuidado en bash el personaje! es un personaje especial, por lo que tiene que citarlo solo (como lo hice yo) o escapar con la barra invertida.

La sintaxis para excluir múltiples módulos es la misma que la inclusión

mvn -pl ''!submodule1,!submodule2'' install

EDITAR Windows parece que no le gustan las comillas simples, pero es necesario en bash; en Windows, use comillas dobles (gracias @awilkinson)

mvn -pl "!submodule1,!submodule2" install


ahora hay (a partir de la versión 1.1.1) una bandera ''skip'' en el hoyo.

Entonces puedes hacer cosas como:

<profile> <id>pit</id> <build> <plugins> <plugin> <groupId>org.pitest</groupId> <artifactId>pitest-maven</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build> </profile>

en tu módulo, y el pozo se saltará

[INFO] --- pitest-maven: 1.1.3: mutationCoverage (default-cli) @ module-selenium --- [INFO] Salto de proyecto