次のようなbatファイルを作成しました。
mvn clean; mvnパッケージ;
しかし、それは機能せず、最初のコマンドのみが実行されます。
誰かが私を助けることができますか?
つかいます
call mvn clean
call mvn package
バッチファイルにセミコロンは必要ないことに注意してください。 call
を使用する必要がある理由は、mvn
自体がバッチファイルであり、バッチファイルがcall
を使用して相互に呼び出す必要があるためです。発信者。
後続のコマンドをコマンドラインにエコーする(バッチ出力で表示する)場合は、echo on
後に call mvn
が実行されます(次の行)。これは、mvn
がエコーをオフにし、再びオンにしないためです。
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
次のワンライナーを使用することもできます。
call mvn clean package
実行するプロジェクトがまだあります。このようなバットを作成しました。
@echo off
SET DEVELOPMENT_HOME=C:\Projects
cd %DEVELOPMENT_HOME%\Project1\
call mvn clean install
cd %DEVELOPMENT_HOME%\Project2\
call mvn clean install
親ファイルで別のバッチファイルを呼び出す場合は、「呼び出し」を使用して、制御が親バッチファイルに返され、実行が継続されるようにします。
例:mvn clean installを呼び出します
観測された動作は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%