web-dev-qa-db-ja.com

batファイルで複数のmavenコマンドを実行するにはどうすればよいですか?

次のようなbatファイルを作成しました。

mvn clean; 
 mvnパッケージ;

しかし、それは機能せず、最初のコマンドのみが実行されます。

誰かが私を助けることができますか?

90
rascio

つかいます

call mvn clean
call mvn package

バッチファイルにセミコロンは必要ないことに注意してください。 callを使用する必要がある理由は、mvn自体がバッチファイルであり、バッチファイルがcallを使用して相互に呼び出す必要があるためです。発信者。

後続のコマンドをコマンドラインにエコーする(バッチ出力で表示する)場合は、echo on 後に call mvnが実行されます(次の行)。これは、mvnがエコーをオフにし、再びオンにしないためです。

219
Joey

Joeyの答えは素晴らしいですが、おそらくより完全なコード例は、Windowsのバッチファイルから複数のMavenプロジェクトを構築するという同様の問題を理解している私のような誰かに役立つかもしれません。

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
26
foupfeiffer

次のワンライナーを使用することもできます。

call mvn clean package 
13
carlspring

実行するプロジェクトがまだあります。このようなバットを作成しました。

@echo off
SET DEVELOPMENT_HOME=C:\Projects

cd %DEVELOPMENT_HOME%\Project1\
call mvn clean install

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

親ファイルで別のバッチファイルを呼び出す場合は、「呼び出し」を使用して、制御が親バッチファイルに返され、実行が継続されるようにします。

例:mvn clean installを呼び出します

7
saurav

観測された動作はMS-DOS 1.0の時点からのものであり、Windows call関数を次のように使用するソリューションとして、互換性の理由から維持されています。

call mvn clean
call mvn package

「呼び出し」は、あるバッチプログラムを別のバッチプログラムから実行し、サブルーチンとして解釈します。

次を使用してMavenを構築し、開発目的で任意のUNIXフォルダーに渡すことができます。

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%
0
user11404376