2010-10-27 21 views
138

Tengo un archivo por lotes que ejecuta tres comandos Maven, uno después del otro. Cada comando se puede ejecutar con éxito en el script, ¡solo! Pero cuando agrego los tres comandos al mismo archivo, solo el primero se ejecuta antes de que el script salga. ¿Alguna idea de por qué?¿Por qué solo se ejecuta la primera línea de este archivo por lotes de Windows pero las tres líneas se ejecutan en un shell de comandos?

mvn install:install-file -DgroupId=gdata -DartifactId=base -Dversion=1.0 -Dfile=gdata-base-1.0.jar -Dpackaging=jar -DgeneratePom=true 
mvn install:install-file -DgroupId=gdata -DartifactId=blogger -Dversion=2.0 -Dfile=gdata-blogger-2.0.jar -Dpackaging=jar -DgeneratePom=true 
mvn install:install-file -DgroupId=gdata -DartifactId=blogger-meta -Dversion=2.0 -Dfile=gdata-blogger-meta-2.0.jar -Dpackaging=jar -DgeneratePom=true 

Además, si copio los tres comandos y pegarlos en una consola de comandos (cmd.exe), ejecutan una tras otra sin ningún problema. Así que este es aparentemente un problema con el archivo de dos por lotes.

+1

Lo un coincedent: Vine aquí con el mismo problema y también los mismos comandos en mi archivo por lotes - varias líneas de "mvn install: install-file" :-D – fishbone

Respuesta

234

Maven utiliza archivos por lotes para hacer su trabajo. Con cualquier secuencia de comandos por lotes, debe llamar a otra secuencia de comandos mediante el comando call para que sepa que regresa a la secuencia de comandos después de que se complete la secuencia de comandos llamada. Pruebe anteponiendo call a todos los comandos.

Otra cosa que podría intentar es usar el comando start que debería funcionar de manera similar.

+1

He puesto 'ant' dentro de los archivos por lotes de Windows antes y se requirió' call' para que 'ant' se ejecute. Sin 'call' el lote se detendrá después del primer comando, por lo tanto, los dos segundos no se ejecutarán. http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/call.mspx para obtener más información sobre 'call' – Owen

+15

' start' hará que se genere una nueva ventana, y cada de los tres comandos se ejecutará en paralelo. Si necesita que se ejecuten sincrónicamente, use 'call'. – akf

+0

'llamada' trabajado. ¡Gracias! – wiki

1

Debe ser que el comando mvn particular exec sy no devuelve, por lo tanto, no ejecuta el resto de los comandos.

+0

¿Hay alguna manera de forzar el script para ejecutar el siguiente 'mvn' ¿mando? – wiki

0

intentar escribir el siguiente archivo por lotes y ejecutarla:

Echo one 
cmd 
Echo two 
cmd 
Echo three 
cmd 

Sólo las dos primeras líneas se ejecutan. Pero si escribe "salir" en el símbolo del sistema, las siguientes dos líneas se procesan. Es un caparazón cargando otro.

Para asegurarse de que esto no es lo que está sucediendo en su script, simplemente escriba "exit" cuando termine el primer comando.

HTH!

+0

Poco probable; De hecho, Maven usa un archivo por lotes, por lo que necesitan usar 'call'. No es un shell anidado que no está terminado. – Joey

+0

@Joey Gracias. Eso es lo que supuse. –

4

Para ejecutar más experto construye a partir de una secuencia de comandos que utilizará ventanas llamada función de la siguiente manera:

call mvn install:install-file -DgroupId=gdata -DartifactId=base -Dversion=1.0 -Dfile=gdata-base-1.0.jar -Dpackaging=jar -DgeneratePom=true 
call mvn install:install-file -DgroupId=gdata -DartifactId=blogger -Dversion=2.0 -Dfile=gdata-blogger-2.0.jar -Dpackaging=jar -DgeneratePom=true 
call mvn install:install-file -DgroupId=gdata -DartifactId=blogger-meta -Dversion=2.0 -Dfile=gdata-blogger-meta-2.0.jar -Dpackaging=jar -DgeneratePom=true 
6

Tener call ayuda

Sin embargo hoy en día di no

Este es cómo lo resolví:

bat contenido del archivo (si quieres dejar de lotes cuando uno de CMDS errores) el contenido del archivo

cmd1 &&^
cmd2 &&^
cmd3 &&^
cmd4 

murciélago (si quieres continúan lotes cuando uno de CMDS errores)

cmd1 &^
cmd2 &^
cmd3 &^
cmd4 
+0

(El primer ejemplo aquí es equivalente a' cmd1 && cmd2 && cmd3 && cmd4', haciendo esencialmente todos los comandos una línea). –

+0

Es cierto. Lo escribí de esa manera porque es un archivo bat, en su mayoría tendrá múltiples comandos, posiblemente largos, 4 comandos en una línea no serán buenos en el mantenimiento futuro. La legibilidad es clave en la redacción de buenos programas, por lo que están en diferentes líneas. –

Cuestiones relacionadas