Como impedir o MVN Jetty: Run da execução da fase de teste?
-
27-09-2019 - |
Pergunta
Usamos o MySQL na produção e o Derby para testes de unidade. Nossa versão do POM.XML copia o Derby da persistence.xml antes dos testes e o substitui pela versão MySQL na fase de preparação:
<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>
O problema é que, se eu executar o MVN Jetty: execute, ele executará a tarefa de cópia do arquivo de teste.xml antes de iniciar o jetty. Eu quero que seja executado usando a versão de implantação. Como posso consertar isso?
Solução
o jetty:run
meta invoca a execução da fase do ciclo de vida test-compile
Antes de se executar. Então, pulando os testes execução não vai mudar nada.
O que você precisa fazer é vincular o copy-test-persistence
execução em uma fase de ciclo de vida posterior a test-compile
mas antes de test
. E não há dúzia de candidatos, mas apenas um: process-test-classes
.
Isso é conceitualmente talvez não seja o ideal, mas é a opção menos pior, e 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>
Outras dicas
Tente adicionar os argumentos -Dmaven.test.skip = true ou -dskiptests = true na linha de comando. Por exemplo
mvn -DskipTests=true jetty:run ...
Não tenho certeza se isso ignora a fase de recursos do processo de teste.
Mais informações sobre os testes de pular está disponível na documentação do plug -in SureFire.