Si usted tiene un proyecto de varios módulos grandes y que le gustaría omitir pruebas sólo en ciertos módulos sin la necesidad de cambiar cada uno de los archivos del módulo pom.xml
con configuración personalizada y perfilado, se puede añadir lo siguiente a los padres pom.xml
archivo:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<id>regex-property</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>maven.test.skip</name>
<value>${project.artifactId}</value>
<regex>(module1)|(module3)</regex>
<replacement>true</replacement>
<failIfNoMatch>false</failIfNoMatch>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<modules>
<module>module1</module>
<module>module2</module>
<module>module3</module>
</modules>
Gracias a la build-helper-maven-plugin
lo haría real Verifique dinámicamente si se encuentra en un determinado módulo o no durante la construcción, a través de la propiedad project.artifactId
(señalando cada módulo artifactId
durante la construcción), la expresión regular buscará la coincidencia para ciertos valores (los nombres de los módulos para los que desea omitir pruebas) y llenó la propiedad maven.test.skip
en consecuencia (configurándola en true
).
En este caso, las pruebas se saltearán para module1
y module3
mientras se ejecutan correctamente para module2
, es decir, según lo expresado por la expresión regular.
La ventaja de este enfoque es tenerlo dinámico y centralizado (en el elemento principal pom.xml
), por lo tanto, mejor para el mantenimiento: puede agregar o eliminar módulos en cualquier momento simplemente cambiando la expresión regular simple anterior.
Obviamente, si este no es el comportamiento predeterminado de la compilación (caso recomendado), siempre puede envolver el fragmento anterior en un maven profile.
También podría ir más allá y tener un comportamiento dinámico basado en su entrada:
<properties>
<test.regex>none</test.regex>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<id>regex-property</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>maven.test.skip</name>
<value>${project.artifactId}</value>
<regex>${test.regex}</regex>
<replacement>true</replacement>
<failIfNoMatch>false</failIfNoMatch>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
realidad, nos encontramos reemplazando el valor de expresiones regulares con una propiedad, test.regex
, con el valor por defecto a none
(o lo que sea no coincidiría con ningún nombre de módulo o, también, los emparejamientos de omisión predeterminados requeridos).
Entonces, desde la línea de comandos que podríamos haber
mvn clean test -Dtest.regex="(module1)" > will skip tests only for module1
mvn clean test -Dtest.regex="(module1)|(module2)" > will skip tests on module1 and module2
mvn clean test -Dtest.regex="(module1)|(module2)|(module3)" > will skip the three module tests
mvn clean test -Dtest.regex=".+" > will skip all module tests
mvn clean test > would not skip anything (or fall back on default behavior)
Eso es, a continuación, en tiempo de ejecución que decida, sin ninguna necesidad de cambiar el archivo pom.xml
o la activación de cualquier perfil.
Gracias que funcionó. El primer fragmento de código omite la prueba; Posteriormente, puedo usar su sugerencia adicional para definir otro perfil. Mi confusión estaba en el hecho de que mi pom invocaba implícitamente infalible. No se mencionó el plugin surefire en mi pom.xml. No obstante, el código para configurar el plugin surefire correctamente lo hizo. –
Para otros, otra opción es omitir todo el módulo hasta que quieras compilarlo y verificarlo: http://stackoverflow.com/a/5542779/543935 – yellavon
Y aquí te mostramos cómo crear un perfil de administrador que ejecute pruebas solo por si acaso está activado: http://stackoverflow.com/questions/34334257/why-maven-runs-profile-plugin-even-if-profile-is-not-activated/41808680#41808680 – Vadzim