2016-05-19 8 views
1

Unten ist der relevante Teil meiner POM -Wie führe ich das Maven Exec mehrmals in einem Build-Plugin

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.5.0</version> 
    <executions> 
     <execution> 
      <id>StartHub</id> 
      <phase>test</phase> 
      <goals> 
       <goal>exec</goal> 
      </goals> 
      <configuration> 
       <executable>java</executable> 
       <arguments> 
        <argument>-jar</argument> 
        <argument>${basedir}/src/lib/Hub/selenium-server-standalone-2.53.0.jar</argument> 
        <argument>-role</argument> 
        <argument>hub</argument> 
        <argument>-throwOnCapabilityNotPresent</argument> 
        <argument>false</argument> 
        <argument>-newSessionWaitTimeout</argument> 
        <argument>20000</argument> 
       </arguments> 
      </configuration> 
     </execution> 
     <execution> 
      <id>StartNode</id> 
      <phase>test</phase> 
      <goals> 
       <goal>exec</goal> 
      </goals> 
      <configuration> 
       <executable>java</executable> 
       <arguments> 
        <argument>-jar</argument> 
        <argument>${basedir}/src/lib/Node/selenium-server-standalone-2.53.0.jar</argument> 
        <argument>-hub</argument> 
        <argument>http://127.0.0.1:4444/register/grid</argument> 
        <argument>-port</argument> 
        <argument>5555</argument> 
        <argument> 
         Dwebdriver.chrome.driver=${basedir}/chromedriver.exe</argument> 
       </arguments> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Ich habe versucht, die exec-Plugin zu verwenden, um ein Glas (Selen Standalone-Server) ausgeführt wird in zwei Konfigurationen (Hub und Node).

Mein Problem ist, dass die jar nur einmal in der Konfiguration ausgeführt wird, die zwischen dem ersten Paar der "Ausführung" -Tags angegeben ist. Ich habe ausgiebig nach einer Lösung gesucht und das einzige, was ich gefunden habe, war, dass die IDs für verschiedene Ausführungen unterschiedlich sein müssen, was ich korrigiert habe. Ich kann es immer noch nicht schaffen, die Gläser zweimal zu laufen, obwohl ich einen von ihnen erfolgreich ausführen kann, wenn ich die Ausführung des anderen auskomme.

Ich sollte auch erwähnen, dass ich das Projekt in Eclipse ausführen, also idealerweise was ich tun möchte, ist mit der rechten Maustaste auf die POM.xml klicken Sie auf Run-as und wählen Sie "Maven-Test".

Antwort

1

Dies ist kein Problem Hinrichtung Maven, sondern ein Problem im Zusammenhang mit, was Sie ausführen: ein Blockprozess (der erste Server), die die Build-Hören für einen Knoten stoppen würde, die nie (verbunden bekommen würden, weil seine Ausführung ‚gewonnen t starten).

Ändern pom auf die folgenden:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.5.0</version> 
    <executions> 
     <execution> 
      <id>StartHub</id> 
      <phase>test</phase> 
      <goals> 
       <goal>exec</goal> 
      </goals> 
      <configuration> 
       <executable>java</executable> 
       <arguments> 
        <argument>-version</argument> 
       </arguments> 
      </configuration> 
     </execution> 
     <execution> 
      <id>StartNode</id> 
      <phase>test</phase> 
      <goals> 
       <goal>exec</goal> 
      </goals> 
      <configuration> 
       <executable>java</executable> 
       <arguments> 
        <argument>-version</argument> 
       </arguments> 
      </configuration> 
     <a/execution> 
    </executions> 
</plugin> 

Es wäre perfekt die beiden exec Hinrichtungen auszuführen, Druck zweimal die Java-Version. Hinweis: Das Snippet ist ein Kopieren und Einfügen aus Ihrer Frage, wobei nur die Argumente des Befehls java durch die Option version ersetzt werden.


Was Sie wahrscheinlich suchen sie ist es, die beiden Befehle im Hintergrund auszuführen, oder zumindest in einer nicht blockierenden Art und Weise, um die zweiten ausgeführt zu bekommen, dann mit dem Build gehen (um einige Tests durchführen I vermuten).

Überprüfen Sie this SO question auf wie man es erreicht: anstelle der exec-maven-plugin, verwenden Sie die maven-antrun-plugin, um die zwei Selen Befehle zu starten.


Als weitere Anmerkung, sollten Sie wahrscheinlich betrachten die maven-failsafe-plugin statt mit und Integrationstests durchführen, um die Ausführungen oben in die pre-integration-test Phase Anbringen und sie während der post-integration-test Phase, um zu stoppen, um sie richtig zu reinigen.

+0

Vielen Dank für die Antwort. Ich habe dies mit Process Builder behandelt, aber es ist schön zu wissen, warum es nicht funktionierte und über das Antrun-Plugin. Ich bin mir des fehlersicheren Plugins bewusst, aber ich habe es nicht getan, weil ich vor und nach den Tests nichts zu tun habe, das ich nicht mit den Anmerkungen von testNG umgehen kann. Ich wäre daran interessiert zu wissen, ob der Umgang mit solchen Aufgaben über Maven einen programmatischen Vorteil hat. Aber ich denke, das ist eine ganz andere Frage !! Nochmals vielen Dank für Ihre Zeit !! Ich akzeptiere das als Antwort – Savvy