新年快樂!
經常看到有人問,如何用javac編譯多個子目錄,現在呈上。
按習慣,不廢話,直接上源碼。
先說一下目錄結構:
%CD%/src---------------------源碼目錄
/webroot/------------輸出目錄
/lib---------依賴的.jar
/classes---編譯輸出目錄
主文件:build_compile_batch.cmd
@ECHO OFF
REM 生成自動編譯的批處理文件名
SET BAT=_compile_auto.cmd
REM 包含運行
SET WITH_RUN=1
REM SETLOCAL enableDelayedExpansion
ECHO @ECHO OFF>%BAT%
REM 編譯後要運行的主類
ECHO SET mainclass=org.mega.MyDemoProgram>>%BAT%
ECHO SETLOCAL enableDelayedExpansion>>%BAT%
ECHO.>>%BAT%
ECHO SET CUR=%%CD%%>>%BAT%
REM 輸出目錄
ECHO SET OUTPUT=%%CUR%%/webroot>>%BAT%
ECHO CD %%OUTPUT%%>>%BAT%
REM 編譯的輸出目錄
ECHO REM RMDIR /s /q classes>>%BAT%
ECHO IF NOT EXIST classes MKDIR classes>>%BAT%
ECHO CD %%CUR%%>>%BAT%
ECHO.>>%BAT%
ECHO SET CP=%%OUTPUT%%/classes>>%BAT%
REM 準備源碼的子目錄(包)
ECHO FOR %%%%a IN ( %%OUTPUT%%/lib/*.jar ) DO SET CP=!CP!;%%%%a>>%BAT%
ECHO.>>%BAT%
ECHO SET OPT=-d %%OUTPUT%%/classes -cp %%CP%% -encoding utf-8>>%BAT%
FOR /d %%a IN ( src/*.* ) DO cmd /c build_compile_batch-sub.cmd %%a
ECHO.>>%BAT%
ECHO ECHO 正在編譯...>>%BAT%
ECHO javac %%OPT%% %%JFILES%%>>%BAT%
ECHO.>>%BAT%
ECHO IF "%%errorlevel%%" equ "0" (>>%BAT%
ECHO ECHO 編譯成功,正在拷貝資源文件...>>%BAT%
ECHO xcopy /i /y src/*.* %%OUTPUT%%/classes>>%BAT%
IF "%WITH_RUN%" EQU "1" (
ECHO SET CP=.;!CP!>>%BAT%
ECHO CD %%OUTPUT%%/classes>>%BAT%
ECHO cd>>%BAT%
ECHO REM ECHO !CP!>>%BAT%
ECHO ECHO 編譯完成,正在運行...>>%BAT%
ECHO java -cp !CP! %%mainclass%%>>%BAT%
)
ECHO pause>>%BAT%
ECHO ) ELSE (>>%BAT%
ECHO pause>>%BAT%
ECHO )>>%BAT%
PAUSE
輔助文件:
build_compile_batch-sub.cmd
@ECHO OFF
IF "%1" NEQ "" (
echo %1
IF EXIST %1/*.java (
REM 如果有.java文件,則添加到編譯列表
ECHO SET JFILES=%%JFILES%% %1/*.java>>%BAT%
)
REM 處理更深層的包
FOR /d %%b IN ( %1/*.* ) DO cmd /c "build_compile_batch-sub.cmd %%b"
)
執行 build_compile_batch.cmd 後,生成 _compile_auto.cmd。
再執行 _compile_auto.cmd,就進行編譯、編譯後自動運行程序。
稍修改一下
build_compile_batch.cmd 即可適合其它的項目。
希望有人會喜歡。