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)

È stato utile?

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".

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