Comment éviter la jetée mvn: exécuter d'exécuter la phase de test?
-
27-09-2019 - |
Question
Nous utilisons MySQL dans la production, et Derby pour les tests unitaires. Nos copies pom.xml version Derby de persistence.xml avant les essais, et le remplace par la version MySQL en phase de préparation-paquet:
<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>
Le problème est que si j'exécute la jetée mvn: exécuter exécutera la tâche de copie de fichier persistence.xml test avant la jetée de départ. Je veux qu'il soit exécuté en utilisant la version de déploiement. Comment puis-je résoudre ce problème?
La solution
Le but de jetty:run
invoque l'exécution de la phase du cycle de vie test-compile
avant d'exécuter lui-même . Ainsi, les tests exécution ne changera rien.
Ce que vous devez faire est de lier l'exécution de copy-test-persistence
à une phase postérieure du cycle de vie test-compile
mais avant test
. Et il n'y a pas de candidats douzaine, mais un seul: process-test-classes
.
C'est conceptuellement peut-être pas idéal, mais il est l'option la moins pire, et il fonctionnera:
<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>
Autres conseils
Essayez d'ajouter les arguments -Dmaven.test.skip = true ou -DskipTests = true dans la ligne de commande . Par exemple
mvn -DskipTests=true jetty:run ...
Je ne sais pas si ce processus saute la phase-test-ressources, cependant.
En savoir plus sur les tests à sauter est disponible dans Surefire Plugin de documentation.