1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| @echo off
set "origPath=%cd%"
@REM 检测输入的路径是否为maven项目 :inputPath set /p projectPath=请输入项目路径: if not exist "%projectPath%\pom.xml" ( echo 该路径不是一个有效的Maven项目。 goto inputPath )
@REM 构建项目 cd /d "%projectPath%" if not exist target\*.jar ( echo 正在构建项目... CALL mvn clean package -Dmaven.test.skip=true if errorlevel 1 ( echo 项目构建过程中出现错误。 goto end ) )
echo 正在运行项目... @REM 根据文件大小来获取jar包(默认以最大的为要运行的jar包) for /f "delims=" %%I in ('dir /b /o:s /a:-d target\*.jar') do ( set "jarfile=target\%%I" goto runNativeApplication )
@REM 使用native-image-agent分析生成的jar包,并生成构建native所需要的配置信息。需要在启动native jar包的时候尽量执行代码里面的逻辑,以覆盖大部分分支以保证执行的效果 :runNativeApplication set "command=java -agentlib:native-image-agent=config-output-dir=%projectPath%\src\main\resources\META-INF\native-image -jar %jarfile%" echo 启动命令:%command% set "windowTitle=Window-%RANDOM%" start cmd /k "title %windowTitle% && %command%" set "pid=" timeout /t 1 >nul for /f "tokens=2" %%a in ('tasklist /v ^| findstr %windowTitle%') do set pid=%%a echo 获取到的PID为:%pid%,将等待外部窗口运行结束后继续执行后续任务。
@REM 等待执行的native jar包结束 :waitForNativeApplicationEnd tasklist /FI "PID eq %pid%" 2>NUL | findstr /I /C:"%pid%" 2>NUL set "checkNaiveApplicationTaskEndInterval=5" if errorlevel 1 ( goto generateImage ) else ( echo 进程%pid%仍然在运行,%checkNaiveApplicationTaskEndInterval%秒后继续检测... timeout /t %checkNaiveApplicationTaskEndInterval% /nobreak > NUL goto waitForNativeApplicationEnd )
@REM 调用构建native image :generateImage set /p generateImage=是否生成native image (y/n)? if /i "%generateImage%" EQU "y" ( CALL mvn -Pnative native:compile goto end ) else if /i "%generateImage%" EQU "n" ( echo 跳过生成native image。 goto end ) else ( echo 请输入 y 或 n。 goto generateImage )
:end echo 脚本执行结束,按下任意键退出... cd /d "%origPath%" pause >nul exit /b
|