Come prevenire molo mvn: eseguito da esecuzione fase di test?
-
27-09-2019 - |
Domanda
Usiamo MySQL in produzione, e Derby per i test unitari. I nostri pom.xml copie versione Derby di persistence.xml prima di test, e lo sostituisce con la versione di MySQL nel preparare-package fase:
<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>
Il problema è, che se eseguo molo mvn: eseguirlo sarà eseguita l'operazione di copia dei file di prova prima di iniziare persistence.xml pontile. Voglio che essere eseguito utilizzando la versione distribuzione. Come posso risolvere questo problema?
Soluzione
L'obiettivo jetty:run
invoca l'esecuzione della fase del ciclo di vita test-compile
prima dell'esecuzione stessa . test Così saltare esecuzione non cambierà nulla.
Quello che dovete fare è quello di legare l'esecuzione copy-test-persistence
ad una posteriore fase del ciclo di vita di test-compile
ma prima test
. E non ci sono dozzine di candidati ma solo uno: process-test-classes
.
Questo è concettualmente forse non è l'ideale, ma è l'opzione meno peggio, e funzionerà:
<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>
Altri suggerimenti
Prova ad aggiungere gli argomenti -Dmaven.test.skip = true o -DskipTests = true in la linea di comando . Ad esempio
mvn -DskipTests=true jetty:run ...
Non so se questo salta la fase di processo-test-risorse, però.
Maggiori informazioni su saltare i test è disponibile in Surefire plug documentazione .