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?

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top