web-dev-qa-db-fra.com

Je veux exécuter des commandes Shell à partir du pom.xml de Maven

Je veux exécuter des commandes Linux Shell 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>
95
NareshKumar

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>
138
Curtis

Le problème ici est que je ne sais pas ce qui est attend. Avec votre configuration actuelle, invoquer le plug-in sur la ligne de commande ne fonctionnerait que:

 $ mvn exec: exec 
 [INFO] Recherche de projets ... 
 [INFO] ------------------ -------------------------------------------------- ---- 
 [INFO] Bâtiment Q3491937 
 [INFO] segment de tâche: [exec: exec] 
 [INFO] ----------- -------------------------------------------------- ----------- 
 [INFO] [exec: exec {exécution: default-cli}] 
 [INFO] ordinateur portable 
 [INFO] - -------------------------------------------------- -------------------- 
 [INFO] CONSTRUIRE AVEC SUCCÈS 
 [INFO] ------------ -------------------------------------------------- ---------- 
 ... 

Le global configuration est utilisé, la commande hostname 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 qu'un plugin soit exécuté dans le cadre de la construction, vous devez lier un objectif sur une phase spécifique. Par exemple, pour le 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>

Puis:

 $ mvn compile 
 [INFO] Recherche de projets ... 
 [INFO] -------------------- -------------------------------------------------- - 
 [INFO] Bâtiment Q3491937 
 [INFO] segment de tâche: [compiler] 
 [INFO] --------------- -------------------------------------------------- ------- 
 [INFO] [ressources: ressources {execution: default-resources}] 
 [INFO] Utilisation du codage 'UTF-8' pour copier les ressources filtrées. 
 [INFO] ignorer le répertoire source non existant/répertoire/home/Pascal/Projets/Q3491937/src/main/resources ] Rien à compiler - toutes les classes sont à jour 
 [INFO] [exec: exec {exécution: un-exécution}] 
 [INFO] ordinateur portable 
 [INFO] - -------------------------------------------------- -------------------- 
 [INFO] CONSTRUIRE AVEC SUCCÈS 
 [INFO] ------------ -------------------------------------------------- ---------- 
 ... 

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

34
Pascal Thivent

Résolu Le problème est que l'exécutable fonctionne de manière différente sous Linux. Si vous voulez exécuter un fichier .sh, vous devez écrire comme suit. Ecris-le dans pom.xml

    <plugin>
        <artifactId>exec-maven-plugin</artifactId>
    <version>1.6.0</version>
        <groupId>org.codehaus.mojo</groupId>
        <executions>
            <execution><!-- Run our version calculation script -->
                <id>Renaming build artifacts</id>
                <phase>package</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>bash</executable>
            <commandlineArgs>handleResultJars.sh</commandlineArgs>
                </configuration>
            </execution>
        </executions>
    </plugin>
12
james25

2 options:

  1. Vous voulez exécuter une commande de maven sans se lier à aucune phase, vous tapez simplement la commande et maven l'exécute, vous voulez juste exécuter un travail, vous ne vous souciez pas de savoir si nous sommes en compilation/package/... Disons que je veux exécuter npm start avec maven, vous pouvez le réaliser avec ce qui suit:

mvn exec:exec -Pstart-node

Pour cela, vous avez besoin de la section maven ci-dessous

  <profiles>
    <profile>
      <id>start-node</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3.2</version>
            <executions>
              <execution>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>npm</executable>
              <arguments><argument>start</argument></arguments>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

  </profiles>
  1. Vous voulez exécuter une commande arbitraire de maven pendant que vous êtes à une phase spécifique, par exemple lorsque je suis à la phase d'installation, je veux exécuter npm install vous pouvez le faire avec:

mvn install

Et pour que cela fonctionne, vous aurez besoin de la section ci-dessous:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.3.2</version>
    <executions>

      <execution>
        <id>npm install (initialize)</id>
        <goals>
          <goal>exec</goal>
        </goals>
        <phase>initialize</phase>
        <configuration>
          <executable>npm</executable>
          <arguments>
            <argument>install</argument>
          </arguments>
        </configuration>
      </execution>
3
Tomer Ben David