Necesitamos 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 compilamos en el servidor CI, pero cuando los desarrolladores compilan localmente (y las pruebas se ejecutan), queremos omitir ese módulo.
¿Hay alguna manera de hacer esto con una configuración de perfil? Busqué en Google y miré las otras preguntas / respuestas aquí y no he encontrado una buena solución.
Supongo que una opción es eliminar ese submódulo del padre por pom.xml
completo y simplemente agregar otro proyecto en nuestro servidor de CI para construir ese módulo.
Sugerencias?
maven
continuous-integration
jenkins
denishaskin
fuente
fuente
Respuestas:
Claro, esto se puede hacer usando perfiles. Puede hacer algo como lo siguiente en su padre pom.xml.
En su CI, ejecutaría maven con el
ci
perfil, es decirmvn -P ci clean install
fuente
activeByDefault
ese perfil y luego tuve que agregar otro perfil vacío (por ejemploskip-integration-tests
) para poder omitirlos.Maven versión 3.2.1 agregó esta característica, puede usar el
-pl
interruptor ( acceso directo a la--projects
lista) con!
o-
( fuente ) para excluir ciertos submódulos.¡Ten cuidado al golpear al personaje! es un carácter especial, por lo que debe citarlo (como lo hice) o escapar con el carácter de barra diagonal inversa.
La sintaxis para excluir múltiples módulos es la misma que la inclusión
EDITAR Windows no parece gustarle las comillas simples, pero es necesario en bash; en Windows, use comillas dobles (gracias @awilkinson)
fuente
mvn -pl !com.acme:nestedmodule1
mvn -pl '!path/to/submodule/directory'
, sin usar groupId y artifactId. Mi respuesta funciona sisubmodule1
ysubmodule2
se encuentran en el directorio actual.-pl
enmvn install
, es probable que necesite usarlo paramvn deploy
asíEs posible decidir qué proyectos de reactor se construirán especificando el
-pl
argumento de la línea de comando:Acepta una lista de parámetros separados por comas en una de las siguientes formas:
[groupId]:artifactId
Por lo tanto, dada la siguiente estructura:
Puede especificar la siguiente línea de comando:
para construir todo Elimine elementos de la lista para crear solo los módulos que desee.
EDITAR: como señaló blackbuild , a partir de Maven 3.2.1 tiene una nueva
-el
bandera que excluye proyectos del reactor, de manera similar a lo que-pl
hace:fuente
mvn install -pl .
instalar pom padre solo en el repositorio local sin construir módulos.La noción de proyectos de módulos múltiples está ahí para atender las necesidades de segmentos codependientes de un proyecto. Dicho cliente depende de los servicios que a su vez dependen de, por ejemplo, EJB o rutinas de acceso a datos. Usted podría agrupar las pruebas de integración continua (CI) de esta manera. Lo racionalizaría diciendo que las pruebas de CI deben estar en paso con los cambios de lógica de la aplicación.
Supongamos que su proyecto está estructurado como:
El
project-root/pom.xml
define módulosEl
ci/pom.xml
define perfiles como:Esto dará lugar a Maven saltarse las pruebas de este módulo, excepto cuando el perfil de llamada
CI
está activo. Se debe indicar a su servidor de CI que se ejecutemvn clean package -P CI
. El sitio web de Maven tiene una explicación detallada del mecanismo de creación de perfiles .fuente
ahora hay (desde la versión 1.1.1) una bandera de 'saltar' en el hoyo.
Entonces puedes hacer cosas como:
en su módulo, y el hoyo saltará
[INFO] --- pitest-maven: 1.1.3: mutationCoverage (default-cli) @ module-selenium --- [INFO] Proyecto de omisión
fuente