Esecuzione di un'attività posta esperto di installare
Domanda
Voglio correre un semplice exec Maven posto di comando l'installazione di fase. Qual è il modo più semplice possibile per raggiungere questo obiettivo? (Senza aggiungere nuovi plugin)
Soluzione
Se si desidera eseguire questo comando come parte del normale ciclo di vita di compilazione, non c'è altro modo che l'obiettivo vincolante exec
sulla fase install
:
<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>
ho fatto un test semplice utilizzando la configurazione di cui sopra (usando ls
come "COMMAND") con un progetto maven appena creata e mvn install
esecuzione produce il seguente output:
$ 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] ------------------------------------------------------------------------
Come si può vedere, il comando viene eseguito alla fine della fase install
(dopo la copia del manufatto al repository locale).
E se proprio non si vuole aggiungere il frammento al vostro pom, allora si dovrà chiamare in modo esplicito exec:exec
dopo install
sulla riga di comando come suggerito da Whaley.
Altri suggerimenti
Il ciclo di vita di default Maven termina con install e deploy obiettivi -. Non esiste una versione pre e post di questi obiettivi
I potenziali opzioni potrebbe essere quella di:
-
Associare l'exec: mojo exec per la fase di distribuzione. Vorrei mettere in guardia contro questa idea come la fase di distribuzione è veramente destinata a distribuire gli artefatti ad un repository Maven remoto.
-
Eseguire l'exec: mojo exec dopo il gol installare nella vostra invocazione mvn ... per esempio:.
mvn clean install exec: exec -Dexec.executable = "yourcommand" -Dexec.args = "argomenti"
-
Se si dispone di un progetto multi-modulo, creare un altro modulo alla fine dei tuoi
e si legano exec: exec qualsiasi obiettivi usuali all'interno di quel modulo. Questo forzerà questo modulo particolare per eseguire all'ultimo assumere altre reattore esamina non è soddisfatta. Una strategia comune io impiego con progetti Maven Io lavoro su è "in caso di dubbio, creare un altro modulo".