Question

Je veux lancer un simple maven de poste de commandement exec phase d'installation. Quelle est la manière la plus simple possible pour atteindre cet objectif? (Sans ajouter de nouveaux plug-ins)

Était-ce utile?

La solution

Si vous voulez exécuter cette commande dans le cadre du cycle de vie de construction normale, il n'y a pas d'autre moyen que l'objectif contraignant de exec sur la phase 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>

Je l'ai fait un test simple en utilisant la configuration ci-dessus (en utilisant ls comme « COMMANDE ») avec un projet Maven fraîchement créé et produit en cours d'exécution mvn install la sortie suivante:

$ 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] ------------------------------------------------------------------------

Comme on peut le voir, la commande est exécutée à la fin de la phase install (après la copie de l'artefact au référentiel local).

Et si vous ne voulez vraiment pas ajouter l'extrait de code à votre pom, vous devrez appeler explicitement exec:exec après install sur la ligne de commande comme suggéré par Whaley.

Autres conseils

Le cycle de vie par défaut Maven se termine par install et deploy objectifs -. Il n'y a pas de version avant et après de ces objectifs

Les options possibles seraient:

  • Lier le exec: exec mojo à la phase de déploiement. Je vous mets en garde contre cette idée que la phase de déploiement est vraiment destiné à déployer des artefacts à un repository distant.

  • Exécuter l'exécutif: exec mojo après l'installation objectif dans votre invocation mvn ... par exemple:.

    mvn exec installation propre: exec -Dexec.executable = "yourcommand" -Dexec.args = "arguments"

  • Si vous avez un projet multi-module, créer un autre module à la fin de vos et lier exec: exec à l'un des objectifs habituels dans ce module. Cela forcera ce module particulier pour exécuter la dernière hypothèse d'autres le réacteur regarde n'est pas satisfaite. Une stratégie commune que j'emploie des projets de Maven je travaille est « dans le doute, créer un autre module ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top