2012-02-08 14 views
6

Nel mio progetto, abbiamo creato un modulo Maven per ottenere lo specifico JBoss AS e scompattato.
Quindi tutti i casi di test possono essere eseguiti con questo Jboss AS come contenitore incorporato.
Usiamo jboss-ejb3-embedded-standalone per chiamare il contenitore incorporato, tuttavia trova solo JBOSS_HOME dalle variabili di ambiente e usa quello da eseguire. Quindi dobbiamo aggiornare JBOSS_HOME per mvn install.Come posso impostare una variabile di ambiente in Maven per corsa?

Ho provato a fare questo in Maven per introdurre exec-maven-plugin come di seguito:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.2.1</version> 
    <configuration> 
     <executable>env</executable> 
     <environmentVariables> 
      <JBOSS_HOME> 
       C:/Sample/embedded-container/jboss-${version.org.jboss.jbossas} 
      </JBOSS_HOME> 
     </environmentVariables> 
    </configuration> 
    <executions> 
     <execution> 
      <id>resetJbossHome</id> 
      <phase>integration-test</phase> 
      <goals> 
       <goal>exec</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Nell'output di console, posso vedere

[INFO] --- exec-maven-plugin:1.2.1:exec (resetJbossHome) @ test-embedded --- 
.... 
JBOSS_HOME=C:/Sample/embedded-container/jboss-6.1.0.Final 

....

Ma quando si avvia JBOSS, è ancora in esecuzione quello con origine JBOSS_HOME impostato.

Inoltre, ho provato a utilizzare anche il plugin maven-antrun.

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>copyRelease</id> 
      <phase>pre-integration-test</phase> 
      <configuration> 
       <tasks> 
        <exec executable="env"> 
     <env key="JBOSS_HOME" value="C:/Sample/embedded-container/jboss-${version.org.jboss.jbossas}"/> 
    </exec> 
       </tasks> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Si verifica lo stesso.

Mi sbaglio sulla configurazione o ci sono dei modi migliori?

risposta

7

Dai uno sguardo allo Maven profiles.

È possibile definire un profilo per il test, uno per la produzione, con proprietà diverse, come ad esempio

<profiles> 
    <profile> 
    <id>test</id> 
    <jboss.home>PATH TO JBOSS TEST INSTANCE</jboss.home> 
    </profile> 
    <profile> 
    <id>prod</id> 
    <jboss.home>PATH TO JBOSS PROD INSTANCE</jboss.home> 
    </profile> 
</profiles> 

E nel vostro plugin exec:

<environmentVariables> 
    <JBOSS_HOME> 
     ${jboss.home} 
    </JBOSS_HOME> 
</environmentVariables> 
+0

In realtà, il vero problema è dopo aver impostato la environmentVariables, non ha effetto quando si avvia JBoss AS, indipendentemente da ciò che si imposta. :( – Edison

+0

JBoss è stato rilasciato in un processo separato? Forse questo processo eredita dall'env di base e non dall'env del processo di avvio? –

+0

Nel mio progetto, il test JUnit viene avviato da maven-failsafe-plugin e nel test il caso stesso invocherà il metodo createEJBContainer implementato da jboss-ejb3-embedded-jar autonomo, che lancerà il jboss come contenitore. – Edison

Problemi correlati