首页 / 资讯中心 / 文章详情

构建脚本改造说明(target-linux-test / target-linux-prod)

构建脚本改造说明(target-linux-test / target-linux-prod) ★ FEATURED ARTICLE
目标运行创建jar_linux_test.bat/创建jar_linux_prod.bat后在ruoyi-admin下生成与target同级的target-linux-test/target-linux-prod目录里面包含 jar 及全部构建产物同时不污染本地开发用的ruoyi-admin\target。一、涉及文件清单序号文件改动类型1pom.xml项目根新增属性 builddirectory2创建jar_linux_test.bat重写3创建jar_linux_prod.bat重写二、问题背景原脚本使用mvn clean package ... -Dmaven.build.output.directorytarget-linux-test存在两处错误Maven 3.9 不支持通过-Dmaven.build.output.directory或-Dproject.build.directory覆盖构建目录产物仍然输出到ruoyi-admin\target因此target-linux-test目录根本不会被创建。ruoyi-admin\pom.xml中finalName${project.artifactId}/finalName实际产出为ruoyi-admin.jar而脚本判断的是investment_admin.jar必然走到[FAIL] jar not found。实测Maven 3.9.6mvn -q -pl ruoyi-admin help:evaluate -Dexpressionproject.build.directory -DforceStdout -Dmaven.build.output.directorytarget-linux-test ...\ruoyi-admin\target # 参数无效三、改动 1根pom.xml3.1 新增属性properties内在pom.xml的properties末尾springdoc.version之后新增jaxb-api.version2.3.1/jaxb-api.version springdoc.version2.8.16/springdoc.version !-- 构建输出目录名可用 -Dbuild.output.dirxxx 覆盖默认 target -- build.output.dirtarget/build.output.dir /properties3.2 新增directorybuild内第一行build directory${project.basedir}/${build.output.dir}/directory plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId3.3 注意事项属性名不能叫build.directory。该名字与 Maven 模型字段build.directory撞名会报Detected the following recursive expression cycle in build.directory整个 POM 无法解析。因此使用build.output.dir。不传任何参数时默认值为target所有模块的构建行为与改造前完全一致不影响 IDEA 导入与本地调试。builddirectory会被所有子模块继承ruoyi-admin\pom.xml无需改动。四、改动 2创建jar_linux_test.bat完整最终内容echo off setlocal set ROOT_DIR%~dp0 set OUT_DIR%ROOT_DIR%ruoyi-admin\target-linux-test set JAR_NAMEinvestment_linux_test.jar echo. echo echo Build: Linux Test echo cd /d %ROOT_DIR% call mvn clean package -pl ruoyi-admin -am -DskipTests -Dprofile.activedruid,linux-test -Dbuild.output.dirtarget-linux-test if %errorlevel% neq 0 ( echo. echo [FAIL] Build failed! Check error info above. pause exit /b 1 ) rem -Dbuild.output.dir redirects maven output, so ruoyi-admin\target is untouched. if not exist %OUT_DIR%\ruoyi-admin.jar ( echo. echo [FAIL] jar not found: %OUT_DIR%\ruoyi-admin.jar pause exit /b 1 ) copy /y %OUT_DIR%\ruoyi-admin.jar %OUT_DIR%\%JAR_NAME% nul if not exist %OUT_DIR%\%JAR_NAME% ( echo. echo [FAIL] Copy failed! %JAR_NAME% not found in output dir. pause exit /b 1 ) echo. echo echo [OK] Build success! echo Output dir : %OUT_DIR% echo Jar : %JAR_NAME% echo dir %OUT_DIR% pause原内容供对照echo off set TARGET_DIR%~dp0ruoyi-admin\target-linux-test echo. echo echo Build: Linux Test echo cd /d %~dp0 call mvn clean package -pl ruoyi-admin -am -DskipTests -Dprofile.activedruid,linux-test -Dmaven.build.output.directorytarget-linux-test if %errorlevel% neq 0 ( echo. echo [FAIL] Build failed! Check error info above. pause exit /b 1 ) if exist %TARGET_DIR%\investment_admin.jar ( copy /y %TARGET_DIR%\investment_admin.jar %TARGET_DIR%\investment_linux_test.jar echo. echo echo [OK] Build success! echo ) else ( echo [FAIL] jar not found! Check build config. pause exit /b 1 ) rem Build output goes to target-linux-test, local target/classes is NOT touched, no restore needed. pause差异点项原现构建目录参数-Dmaven.build.output.directorytarget-linux-test无效-Dbuild.output.dirtarget-linux-test生效源 jar 名investment_admin.jar不存在ruoyi-admin.jar实际产物输出目录定位依赖构建目录被重定向构建已直接落在ruoyi-admin\target-linux-test失败校验只在 else 分支提示构建失败 / jar 缺失 / 复制失败 分别提示结束信息无打印输出目录、dir列出产物五、改动 3创建jar_linux_prod.bat完整最终内容与 test 版逻辑完全一致仅三处命名不同target-linux-prod、linux-prod、investment_linux_prod.jar。echo off setlocal set ROOT_DIR%~dp0 set OUT_DIR%ROOT_DIR%ruoyi-admin\target-linux-prod set JAR_NAMEinvestment_linux_prod.jar echo. echo echo Build: Linux Prod echo cd /d %ROOT_DIR% call mvn clean package -pl ruoyi-admin -am -DskipTests -Dprofile.activedruid,linux-prod -Dbuild.output.dirtarget-linux-prod if %errorlevel% neq 0 ( echo. echo [FAIL] Build failed! Check error info above. pause exit /b 1 ) rem -Dbuild.output.dir redirects maven output, so ruoyi-admin\target is untouched. if not exist %OUT_DIR%\ruoyi-admin.jar ( echo. echo [FAIL] jar not found: %OUT_DIR%\ruoyi-admin.jar pause exit /b 1 ) copy /y %OUT_DIR%\ruoyi-admin.jar %OUT_DIR%\%JAR_NAME% nul if not exist %OUT_DIR%\%JAR_NAME% ( echo. echo [FAIL] Copy failed! %JAR_NAME% not found in output dir. pause exit /b 1 ) echo. echo echo [OK] Build success! echo Output dir : %OUT_DIR% echo Jar : %JAR_NAME% echo dir %OUT_DIR% pause六、验证记录命令输出结论mvn -q -pl ruoyi-admin help:evaluate -Dexpressionproject.build.directory -DforceStdout...\ruoyi-admin\target默认行为不变mvn -q -pl ruoyi-common,ruoyi-admin help:evaluate ...默认...\ruoyi-common\target子模块继承正常mvn -q -pl ruoyi-admin help:evaluate ... -Dbuild.output.dirtarget-linux-test...\ruoyi-admin\target-linux-test参数生效七、产物目录说明ruoyi-admin\target-linux-test运行后包含文件 / 目录说明运行 jar 是否必需investment_linux_test.jar最终可执行 fat jar复制并重命名是ruoyi-admin.jarMaven 原始产物同上内容否ruoyi-admin.jar.originalrepackage 前的原始 jar否classes\编译后的 .class 与 resources否已打进BOOT-INF/classesgenerated-sources\注解处理器生成的源码否maven-archiver\打包元信息pom.properties否maven-status\增量编译用的文件清单否部署只需investment_linux_test.jarjava -jar investment_linux_test.jar即可运行。八、已知副作用-am会连带构建依赖模块因此ruoyi-common、ruoyi-system、ruoyi-framework、ruoyi-quartz、ruoyi-generator、ruoyi-investment下也会各自生成target-linux-test/target-linux-prod目录各模块默认的target同样不受影响。mvn clean只会清理build.output.dir指向的目录即运行脚本时清理的是target-linux-*本地target不会被删除。-Dprofile.activedruid,linux-test目前在项目资源中未被引用无application-linux-test.yml、无profile.active过滤占位配置生效需后续补充对应的环境配置文件与资源过滤。-----------------------额外日志存放项目以及图片路径
阅读完成 · 觉得有帮助?
咨询建站