Neden bu Windows toplu iş dosyasının yalnızca ilk satırı yürütülür ancak her üç satır da bir komut kabuğunda yürütülür?


171

Birbiri ardına üç Maven komutu yürüten bir toplu iş dosyası var. Her komut komut dosyasında başarılı bir şekilde yürütülebilir -. Ancak üç komutu da aynı dosyaya eklediğimde, komut dosyası çıkmadan önce yalnızca ilk komut yürütülür. Neden olduğu hakkında bir fikrin var mı?

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

Ayrıca, her üç komutu da kopyalayıp bir komut kabuğuna (cmd.exe) yapıştırırsam, birbiri ardına sorunsuz olarak çalışırlar. Görünüşe göre dos toplu iş dosyasıyla ilgili bir sorun var.


2
Ne tesadüf: Ben aynı sorun ve aynı zamanda benim toplu iş dosyasında geldi - birden fazla satır "mvn install: install-file" :-D
fishbone


1
@fishbone ve tesadüfen sen ve OP hem 1.3k itibar var ..
p_champ

Yanıtlar:


299

Maven, işini yapmak için toplu iş dosyalarını kullanır. Herhangi bir toplu komut dosyasında, callkomutunu kullanarak başka bir komut dosyasını çağırmanız gerekir, böylece çağrılan komut dosyası tamamlandıktan sonra komut dosyanıza geri döneceğini bilir. callTüm komutlara devam etmeyi deneyin .

Deneyebileceğiniz başka bir şey de startbenzer şekilde çalışması gereken komutu kullanmaktır .


1
Daha önce antwindows toplu iş dosyalarının içine koydum ve yürütmek için callgerekliydi ant. Olmadan callkesikli ilk komut sonra durur, bu nedenle, sonraki iki çalıştırılmaması. microsoft.com/resources/documentation/windows/xp/all/proddocs/… hakkında daha fazla bilgi içincall
Owen

22
startyeni bir pencerenin ortaya çıkmasına neden olur ve üç komutun her biri paralel olarak çalışır. Senkronize çalışabilmeleri için bunları kullanın call.
akf

11
Komut dosyası oluşturma ortamının bu şekilde davranması ne anlama geliyor? İki komut içeren bir komut dosyası yazmışsam komutların yürütülmesini beklerim; Ben sadece bu komutlardan biri bir komut dosyası olarak uygulanacak olması nedeniyle sadece benim komut yürütmeyi durdurmaya karar beklemiyorum.
bames53

3
@ bames53: Bu, Windows'da komut isteminin modern uygulamalarına taşınan DOS kaynaklı bir sınırlamadır. Microsoft'un hedefleri geriye dönük uyumluluğu sağlamak olduğundan, sonuç budur.
Jeff Mercado

2
call pausecmd pencerelerini açık tutmak istiyorsanız (tırnak işaretleri olmadan) sonuna ekleyin
JinSnow

29

Yardımcı olmak call. Ancak bugün olmadı.

Ben böyle çözdüm:

Bat dosya içeriği ( cmds hatalarından biri olduğunda toplu işi durdurmak istiyorsanız )

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

Bat dosyası içeriği ( cmds hatalarından biri olduğunda toplu işleme devam etmek istiyorsanız )

cmd1 & ^
cmd2 & ^
cmd3 & ^
cmd4

(Buradaki ilk örnek cmd1 && cmd2 && cmd3 && cmd4, tüm komutları bir satır haline getirmekle eşdeğerdir .)
Ben Gotow

2
Doğru. Bu şekilde yazdım çünkü bir yarasa dosyası, çoğunlukla birden fazla, muhtemelen uzun komutlara sahip olacaksınız, bir satırda 4 komut gelecekteki bakımda iyi olmayacak. Okunabilirlik iyi programlar yazmanın anahtarıdır ve bu yüzden farklı satırlardadırlar.
Manohar Reddy Poreddy

1
Bu çözüm benim için hile yaptı. callSolüsyon hataları durdurma değildi, bu bir yok.
Tim

Komut bir hatayla karşılaştığında mükemmel çalıştı!
Harsha JK

9

Bir komut dosyasından daha fazla Maven derlemesi yürütmek için Windows çağrı işlevini aşağıdaki şekilde kullanmalısınız:

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

1

Belirli bir mvnkomutun execs olması ve geri dönmemesi, böylece komutların geri kalanını yürütmemesi gerekir.


Komut dosyasını bir sonraki mvnkomutu yürütmeye zorlamanın bir yolu var mı ?
wiki

1

Aşağıdaki toplu iş dosyasını yazmayı ve çalıştırmayı deneyin:

Echo one
cmd
Echo two
cmd
Echo three
cmd

Yalnızca ilk iki satır yürütülür. Ancak komut istemine "exit" yazarsanız, sonraki iki satır işlenir. Başka bir tane yükleyen bir kabuk.

Komut dosyanızda olanın bu olmadığından emin olmak için, ilk komut bittiğinde "exit" yazmanız yeterlidir.

HTH!


Olası olmayan; Maven gerçekten de bir toplu iş dosyası kullanıyor, bu yüzden kullanmaları gerekiyor call. Sonlandırılmamış iç içe bir kabuk değil.
Joey
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.