133 votes

Comment exécuter plus d'une commande maven dans un fichier bat ?

J'ai fait un fichier bat comme :

mvn clean;
mvn package;

mais cela ne fonctionne pas, seule la première commande est exécutée.

Quelqu'un peut-il m'aider ?

289voto

Joey Points 148544

Utilice

call mvn clean
call mvn package

Notez que vous n'avez pas besoin de point-virgule dans les fichiers batch. Et la raison pour laquelle vous devez utiliser call c'est que mvn est lui-même un fichier batch et les fichiers batch doivent s'appeler les uns les autres à l'aide de call sinon le contrôle ne revient pas à l'appelant.

Si vous souhaitez que les commandes suivantes soient répercutées sur la ligne de commande (dans la sortie du traitement par lots), vous devez également effectuer les opérations suivantes echo on après le call mvn est effectuée (sur la ligne suivante). Cela est dû au fait que mvn éteint l'écho et ne le rallume pas.

31voto

foupfeiffer Points 121

La réponse de Joey est excellente, mais peut-être qu'un exemple de code plus complet aidera les personnes qui, comme moi, sont en train de résoudre un problème similaire de construction de plusieurs projets maven à partir d'un fichier batch sous Windows :

REM maven itself uses a batch file so each mvn must be preceded by "call"
REM the -f flag specifies where the pom.xml is found for the project
REM mvn install will save the target output to %userprofile%\.m2\repository ...

call mvn install -f c:\Users\John\workspace\PropertiesReader\pom.xml

call mvn install -f c:\Users\John\workspace\PropertiesWriter\pom.xml

15voto

carlspring Points 7885

Vous pouvez aussi avoir la phrase suivante :

call mvn clean package

4 votes

Néanmoins, ils devraient utiliser call de sorte que tout ce qu'ils écrivent après le mvn sera exécutée.

10voto

Dmitri Algazin Points 186

J'ai d'autres projets à mener, je les ai créés comme ça :

@echo off
SET DEVELOPMENT_HOME=C:\Projects

cd %DEVELOPMENT_HOME%\Project1\
call mvn clean install

cd %DEVELOPMENT_HOME%\Project2\
call mvn clean install

8voto

Le comportement observé date de l'époque de MS-DOS 1.0 et il est conservé pour des raisons de compatibilité, car les solutions que vous utiliserez sont Windows. llame a de la manière suivante :

call mvn clean
call mvn package

Le "call" exécute un programme batch à partir d'un autre et l'interprète comme un sous-routine.

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