Frage

Ich möchte ein einfaches exec Gefechts Maven Phase installieren laufen. Was ist die einfachste Art und Weise möglich, dies zu erreichen? (Ohne neue Plugins hinzufügen)

War es hilfreich?

Lösung

Wenn Sie diesen Befehl als Teil des normalen Build Lebenszyklus ausgeführt werden soll, gibt es keine andere Möglichkeit, als die Bindung des exec Ziel auf der install Phase:

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.1.1</version>
      <executions>
        <execution>
          <id>my-exec</id>
          <phase>install</phase>
          <goals>
            <goal>exec</goal>
          </goals>
          <inherited>false</inherited>
        </execution>
      </executions>
      <configuration>
        <executable>COMMAND</executable>
      </configuration>
    </plugin>
  </plugins>
</build>

Ich habe einen einfachen Test die Konfiguration oben (mit ls als „COMMAND“) mit einem frisch erstellten Maven Projekt und laufen mvn install erzeugt die folgende Ausgabe mit:

$ mvn install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-exec-testcase
[INFO]    task-segment: [install]
[INFO] ------------------------------------------------------------------------
...
[INFO] [install:install {execution: default-install}]
[INFO] Installing /home/pascal/Projects/maven-exec-testcase/target/maven-exec-testcase-1.0-SNAPSHOT.jar to /home/pascal/.m2/repository/com/mycompany/app/maven-exec-testcase/1.0-SNAPSHOT/maven-exec-testcase-1.0-SNAPSHOT.jar
[INFO] [exec:exec {execution: my-exec}]
[INFO] pom.xml
[INFO] src
[INFO] target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12 seconds
[INFO] Finished at: Tue Jan 05 19:26:04 CET 2010
[INFO] Final Memory: 11M/75M
[INFO] ------------------------------------------------------------------------

Wie wir sehen können, wird der Befehl ausgeführt am Ende der install Phase (nach der Kopie des Artefakts an dem lokalen Repository).

Und wenn Sie wirklich wollen nicht die Schnipsel zu Ihrem pom hinzufügen, dann werden Sie explizit müssen exec:exec nach install auf der Kommandozeile aufrufen, wie durch whaley vorgeschlagen.

Andere Tipps

Die Maven Standardlebenszyklus endet mit dem install und deploy Ziele -. Gibt es keine Pre- und Post-Version dieser Ziele

Mögliche Optionen wären:

  • Binden Sie die exec: exec mojo mit der deploy Phase. Ich würde Sie gegen diese Idee warnen wie die deploy Phase wirklich gemeint ist, Artefakte zu einer Remote-Maven-Repository zu implementieren.

  • Führen Sie die exec: exec mojo, nachdem das Ziel in Ihrem mvn Aufruf installieren ... z.

    MVN reinigen installieren exec: exec -Dexec.executable = "yourcommand" -Dexec.args = "Argumente"

  • Wenn Sie ein Multi-Modul-Projekt haben, erstellen Sie ein anderes Modul am Ende der und binden exec: exec einem der üblichen Ziele innerhalb dieses Moduls. Dadurch wird dieses spezielle Modul zwingen zuletzt unter der Annahme, andere Kriterien rel="nofollow der Reaktor betrachtet nicht erfüllt ist. Eine gemeinsame Strategie, die ich mit Maven Projekten beschäftigen auf ich arbeite, ist „im Zweifelsfall ein anderes Modul erstellen“.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top