¿Cómo prevenir embarcadero mvn: huir de la ejecución de la fase de prueba?
-
27-09-2019 - |
Pregunta
Nosotros usamos MySQL en la producción, y Derby para las pruebas unitarias. Nuestros ejemplares pom.xml versión Derby de persistence.xml antes de las pruebas, y lo reemplaza con la versión de MySQL en la fase de preparación paquete:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>copy-test-persistence</id>
<phase>process-test-resources</phase>
<configuration>
<tasks>
<!--replace the "proper" persistence.xml with the "test" version-->
<copy
file="${project.build.testOutputDirectory}/META-INF/persistence.xml.test"
tofile="${project.build.outputDirectory}/META-INF/persistence.xml"
overwrite="true" verbose="true" failonerror="true" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>restore-persistence</id>
<phase>prepare-package</phase>
<configuration>
<tasks>
<!--restore the "proper" persistence.xml-->
<copy
file="${project.build.outputDirectory}/META-INF/persistence.xml.production"
tofile="${project.build.outputDirectory}/META-INF/persistence.xml"
overwrite="true" verbose="true" failonerror="true" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
El problema es que si ejecuto embarcadero mvn: ejecutarlo ejecutará la tarea de copia de archivos persistence.xml prueba antes de comenzar embarcadero. Quiero que se ejecuta utilizando la versión de despliegue. ¿Cómo puedo solucionar este problema?
Solución
El objetivo jetty:run
invoca la ejecución de la fase del ciclo de vida test-compile
antes de la ejecución en sí . Así que saltarse las pruebas ejecución no va a cambiar nada.
Lo que hay que hacer es obligar a la ejecución copy-test-persistence
a una posterior fase de ciclo de vida para test-compile
pero antes de test
. Y no hay docenas de candidatos, pero sólo uno: process-test-classes
.
Esto es conceptualmente quizás no es ideal, pero es la opción menos peor, y funcionará:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>copy-test-persistence</id>
<phase>process-test-classes</phase>
<configuration>
<tasks>
<!--replace the "proper" persistence.xml with the "test" version-->
<copy
file="${project.build.testOutputDirectory}/META-INF/persistence.xml.test"
tofile="${project.build.outputDirectory}/META-INF/persistence.xml"
overwrite="true" verbose="true" failonerror="true" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
...
</executions>
</plugin>
Otros consejos
Trate de añadir los argumentos -Dmaven.test.skip = true o -DskipTests = true en la línea de comandos. Por ejemplo
mvn -DskipTests=true jetty:run ...
No estoy seguro si esto se salta la fase de proceso de los ensayos recursos, sin embargo.
Más información sobre las pruebas de saltar está disponible en el éxito seguro Plugin de documentación .