2010-08-16 5 views
62

Je veux exécuter des commandes shell Linux avec Maven. Voici ce que j'ai essayé:Je veux exécuter des commandes shell depuis le fichier pom.xml de Maven

<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> 
+0

veuillez nettoyer votre question et formater le pom.xml dans votre question. Ce n'est pas lisible. – zengr

+9

Je ne veux pas être impoli mais vous avez vraiment besoin d'apprendre à poser des questions, nous ne sommes pas psychiques. Qu'est-ce que tu as fait? Qu'est-ce que vous obtenez? quel est le résultat attendu? –

Répondre

109

est ici ce qui travaille 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> 

+6

Je voudrais ajouter que cela ne fonctionne pas avec (au moins) la version 1.5.0 du plugin, puisque '' devrait suivre '' et ne pas y être placé. Cela m'a pris pas mal de temps pour trouver cette simple erreur syntaxique. La sortie d'erreur de Maven n'est vraiment pas très utile. – joergl

+1

Quelle phase ou quel objectif devons-nous fournir si nous voulons exécuter le script après la phase de déploiement? – Lucy

+0

Est-ce que cela fonctionne sur Windows? –

29

Le problème ici est que je ne sais pas ce qui est prévu . Avec votre configuration actuelle, invoquant le plug-in sur la ligne de commande serait tout simplement travailler:

 
$ mvn exec:exec 
[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Q3491937 
[INFO] task-segment: [exec:exec] 
[INFO] ------------------------------------------------------------------------ 
[INFO] [exec:exec {execution: default-cli}] 
[INFO] laptop 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
... 

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

Maintenant, si vous voulez un plug-in pour obtenir exécuté dans le cadre de la construction, vous devez lier un but sur une phase spécifique. Par exemple, pour se 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] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Q3491937 
[INFO] task-segment: [compile] 
[INFO] ------------------------------------------------------------------------ 
[INFO] [resources:resources {execution: default-resources}] 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] skip non existing resourceDirectory /home/pascal/Projects/Q3491937/src/main/resources 
[INFO] [compiler:compile {execution: default-compile}] 
[INFO] Nothing to compile - all classes are up to date 
[INFO] [exec:exec {execution: some-execution}] 
[INFO] laptop 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
... 

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

+0

[ERREUR] ERREUR DE CONSTRUCTION [INFO] -------------------- -------------------------------------------------- - [INFO] Un ou plusieurs paramètres de plug-ins requis ne sont pas valides/manquantes pour 'exec: exec' [0] Dans la définition de plugin 'exec-maven-plugin' spécifier les éléments suivants: . .. VALEUR -OU- sur la ligne de commande, spécifiez: '-Dexec.executable = valeur' ​​ Je reçois cette erreur maintenant. – NareshKumar

+2

@ gnash-85: Je n'ai toujours aucune idée de ce que vous faites.J'ai utilisé l'extrait exact ** vous ** fourni et n'ai eu aucun problème comme indiqué ci-dessus. Veuillez mettre à jour votre question pour montrer comment vous appelez maven (et quelle est votre configuration actuelle si vous avez changé quelque chose). –

+0

J'ai mis le même code dans un module enfant. Et j'essaye d'exécuter le mvn exec: exec du parent pom.xml. Et j'ai cette erreur. Mais quand je l'exécute individuellement, cela fonctionne. – NareshKumar

2

Résolu. Le problème est que l'exécutable fonctionne différemment sous Linux. Si vous voulez exécuter le fichier .sh, vous devez écrire de la façon suivante. Écrivez-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> 
Questions connexes