Pruebas de salto de Maven

226

Estoy usando Maven 2.2.1 y para construir mi proyecto usé este comando

mvn clean install -Dmaven.test.skip=true

Sin embargo, la construcción falló diciendo que no podía encontrar uno de los artefactos. Sin embargo, cuando usé:

mvn clean install -DskipTests

Todo funcionó bien.

Hasta ahora he estado pensando que estos 2 comandos son equivalentes. Sin embargo, este enlace parece sugerir que -Dmaven.test.skip=truetambién omite compilar los casos de prueba.

Sin embargo, eso todavía no me explicaba por qué un comando funciona y otro no. Estaré agradecido si alguien me explica esto.

Prabhjot
fuente
1
¿Qué versión de maven-surefire-plugin estás usando? ¿Es lo mismo que la versión de documento que estás leyendo?
gerrytan
2
Uno salta el edificio, el otro salta corriendo. Si quieres ambos, usa ambos.
Elliott Frisch
1
¿Puede proporcionar detalles de la falla: el mensaje de error o el stacktrace?
Raghuram
1
¿Por qué está utilizando una versión de Maven tan antigua que ya está definida como EoL ?
khmarbaise
1
Entonces, ¿es realmente cierto que para omitir por completo todo lo relacionado con las pruebas tengo que usar -Dmaven.test.skip=true -DskipTests? Uno u otro a veces se puede omitir, dependiendo de las circunstancias, pero quién quiere pensar en eso ...
Landon Kuhn

Respuestas:

121

Como notó, -Dmaven.test.skip=trueomite compilar las pruebas. Más concretamente, se salta la construcción de los artefactos de prueba. Una práctica común para proyectos grandes es tener utilidades de prueba y clases base compartidas entre módulos en el mismo proyecto.

Esto se logra haciendo que un módulo requiera un test-jarmódulo previamente construido:

<dependency>
  <groupId>org.myproject.mygroup</groupId>
  <artifactId>common</artifactId>
  <version>1.0</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

Si se especifica -Dmaven.test.skip=true(o simplemente -Dmaven.test.skip), los test-jars no se compilan, y cualquier módulo que se base en ellos fallará su compilación.

Por el contrario, cuando lo usa -DskipTests, Maven no ejecuta las pruebas, pero las compila y crea el test-jar, dejándolo disponible para los módulos subsiguientes.

Mureinik
fuente
2
¿Cómo resolver este problema? Como mi comando maven en línea, use -Dmaven.test.skip.
Neptuno
2
@neptune qué problema? Si tiene una nueva pregunta, utilice una nueva publicación para formularla.
Mureinik
58

Tuve cierta interdependencia con las pruebas para construir el paquete.

El siguiente comando logra anular la necesidad del artefacto de prueba para completar el objetivo:

mvn -DskipTests=true  package
Gilwo
fuente
29

Hay una diferencia entre cada parámetro.

  • La fase de pruebas de ejecución de -DskipTests omite, significa que al final de este proceso tendrá sus pruebas compiladas.

  • La fase -Dmaven.test.skip = verdadera omisión de compilación y ejecución de pruebas.

Como el parámetro -Dmaven.test.skip = compilación de omisión verdadera no tiene el artefacto de pruebas.

Para obtener más información, solo lea la documentación de surfire: http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html

Dennys Fredericci
fuente
15

Puedo darle un ejemplo que resulta con el mismo problema, pero puede que no le dé una respuesta a su pregunta. (Además, en este ejemplo, estoy usando mi conocimiento de Maven 3, que puede no aplicarse para Maven 2).

En un proyecto maven de módulos múltiples (contiene módulos Ay B, donde Bdepende A), también puede agregar una dependencia de prueba enA partir B.

Esta dependencia puede tener el siguiente aspecto:

<dependency>
     <groupId>com.foo</groupId>
     <artifactId>A</artifactId>
     <type>test-jar</type> <!-- I'm not sure if there is such a thing in Maven 2, but there is definitely a way to achieve such dependency in Maven 2. -->
     <scope>test</scope>
</dependency>

(para obtener más información, consulte https://maven.apache.org/guides/mini/guide-attached-tests.html )
Tenga en cuenta que el proyecto Aproduce artefactos secundarios con un clasificadortests donde se encuentran las clases de prueba y los recursos de prueba.

Si crea su proyecto con -Dmaven.test.skip=true, obtendrá un error de resolución de dependencia siempre que el artefacto de prueba no se encuentre en su repositorio local o repositorios externos. La razón es que las clases de prueba no se compilaron ni testsse produjo el artefacto.
Sin embargo, si ejecuta su compilación con -DskipTestssu testsartefacto, se producirá (aunque las pruebas no se ejecutarán) y la dependencia se resolverá.

Stepan Vavra
fuente
10

Para omitir el caso de prueba durante la instalación de Maven Clean, utilicé -DskipTests paramater en el siguiente comando

mvn clean install -DskipTests

en ventana de terminal

Niraj Trivedi
fuente
9

El parámetro -DskipTests puede no funcionar según su versión de plugin surefire.

Puede usar "-Dmaven.test.skip.exec" en lugar de "-DskipTests"

Fuente: Detalles del parámetro Surefire

vtsamis
fuente
1

Durante la compilación de Maven, puede omitir la ejecución de la prueba agregando el siguiente complemento en pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20.1</version>
    <configuration>
         <skipTests>true</skipTests>
    </configuration>
</plugin>
Radadiya Nikunj
fuente
1
Se salta las pruebas incluso cuando lo hacesmvn test
Pratik Singhal