¿Cómo ejecutar más de un comando maven en un archivo bat?

115

Hice un archivo bat como:

mvn clean;
paquete mvn;

pero no funciona, solo se ejecuta el primer comando.

¿alguien me puede ayudar?

rascio
fuente

Respuestas:

252

Utilizar

call mvn clean
call mvn package

Tenga en cuenta que no necesita punto y coma en los archivos por lotes. Y la razón por la que necesita usar calles que en mvnsí mismo es un archivo por lotes y los archivos por lotes deben llamarse entre sí call; de lo contrario, el control no regresa a la persona que llama.

Si desea que los comandos subsiguientes se repitan en la línea de comandos (mostrar en la salida por lotes), también debe hacerlo echo ondespués de que call mvnhaya terminado (en la siguiente línea). Esto se debe a que mvndesactiva el eco y no lo vuelve a activar.

Joey
fuente
2
lo mismo congradle
Prabs
27

La respuesta de Joey es excelente, pero tal vez un ejemplo de código más completo ayude a cualquier otra persona como yo que también esté resolviendo un problema similar de construir múltiples proyectos maven a partir de un archivo por lotes en 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
fuente
15

También puede tener el siguiente one-liner:

call mvn clean package 
carlspring
fuente
4
Aún así, deben usarlo callpara que mvnse ejecute todo lo que escriban después del comando.
Joey
9

Tengo más proyectos para ejecutar, creé tal bat esto:

@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
fuente
8

Utilice 'llamar' cuando desee invocar otro archivo por lotes en el archivo principal, de modo que el control se devolverá al archivo por lotes principal y continuará la ejecución.

por ejemplo, llame a mvn clean install

saurav
fuente
5

El comportamiento observado proviene de la época de MS-DOS 1.0 y se mantiene por razones de compatibilidad, como soluciones debe utilizar la función de llamada de Windows de la siguiente manera:

call mvn clean
call mvn package

La "llamada" ejecuta un programa por lotes de otro y lo interpreta como una subrutina.

Seweryn Habdank-Wojewódzki
fuente
-1

podemos usar lo siguiente para construir un maven y pasarlo a cualquier carpeta de Unix para propósitos de desarrollo

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%
usuario11404376
fuente
-2

Utilizar

llamada mvn clean package

sample
------
echo %test%
cd %test%\ManaulActionAddNotes-test
call mvn clean
cd %test%\restAuthentication-test
call mvn clean
Boobesh Kumar
fuente
1
¿Dónde hay más información aquí que en las otras respuestas? Me parece un duplicado de la respuesta aceptada (9 años)
jeb