web-dev-qa-db-ja.com

このWindowsバッチファイルの最初の行のみが実行されるのに、3行すべてがコマンドシェルで実行されるのはなぜですか?

3つのMavenコマンドを次々に実行するバッチファイルがあります。各コマンドは、スクリプトで正常に実行できます-それだけで!しかし、3つのコマンドすべてを同じファイルに追加すると、スクリプトが終了する前に最初のコマンドのみが実行されます。理由は何ですか?

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

また、3つのコマンドをすべてコピーしてコマンドシェル(cmd.exe)に貼り付けると、問題なく次々に実行されます。したがって、これは明らかにDOSバッチファイルの問題です。

161
wiki

Mavenは、バッチファイルを使用してビジネスを行います。バッチスクリプトでは、 call コマンドを使用して別のスクリプトを呼び出す必要があります。これにより、呼び出されたスクリプトの完了後にスクリプトに戻るようになります。すべてのコマンドにcallを追加してみてください。

もう1つ試すことができるのは、同様に機能する start コマンドを使用することです。

273
Jeff Mercado

callがあれば役立ちます。しかし、今日はそうではありませんでした。

これは私がそれを解決した方法です:

バットファイルの内容停止 cmdsのいずれかがエラーになった場合にバッチする)

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

バットファイルの内容(必要に応じて継続 cmdsのいずれかがエラーになった場合)

cmd1 & ^
cmd2 & ^
cmd3 & ^
cmd4
21

1つのスクリプトからさらにMavenビルドを実行するには、次の方法でWindows call関数を使用します。

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

特定のmvnコマンドexecsが返されないため、残りのコマンドは実行されません。

1

次のバッチファイルを作成して実行してください。

Echo one
cmd
Echo two
cmd
Echo three
cmd

最初の2行のみが実行されます。ただし、コマンドプロンプトで「exit」と入力すると、次の2行が処理されます。別のものをロードするシェルです。

これがスクリプトで発生しているものではないことを確認するには、最初のコマンドが終了したときに「exit」と入力します。

HTH!

0
Dr. belisarius