Como executar mais de um comando maven no arquivo bat?

115

Eu fiz um arquivo bat como:

mvn clean;
pacote mvn;

mas não funciona, apenas o primeiro comando é executado.

alguém pode me ajudar?

rascio
fonte

Respostas:

252

Usar

call mvn clean
call mvn package

Observe que você não precisa de ponto e vírgula em arquivos em lote. E a razão pela qual você precisa usar callé que mvnele mesmo é um arquivo em lote e os arquivos em lote precisam chamar uns aos outros call, caso contrário, o controle não retorna para o chamador.

Se você quiser que os comandos subsequentes ecoem na linha de comando (mostrar na saída do lote), você também deve fazer echo ondepois de call mvnterminar (na próxima linha). Isso ocorre porque mvndesativa o eco e não o ativa novamente.

Joey
fonte
2
mesmo comgradle
Prabs
27

A resposta de Joey é ótima, mas talvez um exemplo de código mais completo ajude alguém como eu, que também está descobrindo um problema semelhante de construção de vários projetos Maven a partir de um arquivo em lote no 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
foupfeiffer
fonte
15

Você também pode ter o seguinte one-liner:

call mvn clean package 
Carlspring
fonte
4
Ainda assim, eles devem usar callpara que tudo o que escreverem após o mvncomando seja executado.
Joey
9

Tenho mais projetos para rodar, criei esse morcego:

@echo off
SET DEVELOPMENT_HOME=C:\Projects

cd %DEVELOPMENT_HOME%\Project1\
call mvn clean install

cd %DEVELOPMENT_HOME%\Project2\
call mvn clean install
Dmitri Algazin
fonte
8

Use 'call' quando quiser invocar outro arquivo em lote no arquivo pai, de modo que o controle retorne ao arquivo em lote pai e continue a execução.

por exemplo, ligue para mvn clean install

saurav
fonte
5

O comportamento observado é da época do MS-DOS 1.0 e é mantido por questões de compatibilidade, como soluções você deve utilizar a função de chamada do Windows da seguinte forma:

call mvn clean
call mvn package

A "chamada" executa um programa em lote a partir de outro e o interpreta como uma sub-rotina.

Seweryn Habdank-Wojewódzki
fonte
-1

podemos usar o seguinte para construir um maven e passá-lo para qualquer pasta unix para fins de desenvolvimento

SET projectName=commonutil
cd %gitpath%\%projectName%
call mvn clean install -DskipTests=true %password%
IF %ERRORLEVEL% EQU 0 (Echo No error found) ELSE goto exitdoor 
SET jarpath="%gitpath%\%projectName%\target\%projectName%-0.0.1-SNAPSHOT.jar"
copy /Y %jarpath% "%libpath%"
scpg3 %jarpath% %ssh_profile_name%@%hostname%:%dev_lib_folder_name%
user11404376
fonte
-2

Usar

ligar mvn clean package

sample
------
echo %test%
cd %test%\ManaulActionAddNotes-test
call mvn clean
cd %test%\restAuthentication-test
call mvn clean
Boobesh Kumar
fonte
1
Onde estão aqui mais informações do que nas outras respostas? Parece para mim como um duplicado do (9 anos) resposta aceita
jeb