143 votes

Je veux exécuter des commandes shell à partir de pom.xml de maven

Je veux exécuter des commandes shell linux avec maven. Voici ce que j'ai essayé:

 <plugin>  
  <groupId>org.codehaus.mojo</groupId> 
  <artifactId>exec-maven-plugin</artifactId> 
  <version>1.1.1</version> 
  <executions>
    <execution>
      <goals>
        <goal>exec</goal> 
      </goals>
    </execution>
  </executions>
  <configuration>
    <executable>hostname</executable> 
  </configuration>
</plugin>
 

Mais ce qui précède ne fonctionne pas. Pouvez vous me donner un coup de main.

174voto

Curtis Points 2157

Voici ce qui a fonctionné pour moi:

 <plugin>
  <artifactId>exec-maven-plugin</artifactId>
  <groupId>org.codehaus.mojo</groupId>
  <executions>
    <execution><!-- Run our version calculation script -->
      <id>Version Calculation</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>exec</goal>
      </goals>
      <configuration>
        <executable>${basedir}/scripts/calculate-version.sh</executable>
      </configuration>
    </execution>
  </executions>
</plugin>
 

37voto

Pascal Thivent Points 295221

Le problème ici est que je ne sais pas ce qui est prévu. Avec votre configuration actuelle, en invoquant le plugin sur la ligne de commande serait juste de travail:

$ mvn exec exec
[INFO] recherche de projets...
[INFO] ------------------------------------------------------------------------
[INFO] la Construction Q3491937
[INFO] la tâche de segment: [exec exec]
[INFO] ------------------------------------------------------------------------
[INFO] [exec exec {exécution: par défaut-cli}]
[INFO] ordinateur portable
[INFO] ------------------------------------------------------------------------
[INFO] CONSTRUCTION RÉUSSIE
[INFO] ------------------------------------------------------------------------
...

Le global configuration est utilisé, l' hostname commande est exécutée (laptop est mon nom d'hôte). En d'autres termes, le plugin fonctionne comme prévu.

Maintenant, si vous voulez un plugin pour obtenir exécutées dans le cadre de la construction, vous devez lier un but sur une phase spécifique. Par exemple, pour lier sur compile:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.1.1</version>
    <executions>
      <execution>
        <id>some-execution</id>
        <phase>compile</phase>
        <goals>
          <goal>exec</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <executable>hostname</executable>
    </configuration>
  </plugin>

Et puis:

$ mvn compile
[INFO] recherche de projets...
[INFO] ------------------------------------------------------------------------
[INFO] la Construction Q3491937
[INFO] la tâche de segment: [compilation]
[INFO] ------------------------------------------------------------------------
[INFO] [ressources:des ressources {exécution: par défaut-ressources}]
[INFO] à l'Aide de 'UTF-8' encodage de copie filtrée ressources.
[INFO] passer non existant resourceDirectory /home/pascal/Projets/Q3491937/src/main/resources
[INFO] [compiler:compile {exécution: par défaut-compiler}]
[INFO] Rien à la compilation de toutes les classes sont à jour
[INFO] [exec exec {exécution: certains d'exécution}]
[INFO] ordinateur portable
[INFO] ------------------------------------------------------------------------
[INFO] CONSTRUCTION RÉUSSIE
[INFO] ------------------------------------------------------------------------
...

Notez que vous pouvez spécifier un configuration à l'intérieur d'un execution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X