fix: Fix parallel packaging to avoid file overwriting

问题分析:
- 并行打包时所有 profile 在同一个 target 目录工作
- 使用 -Dmaven.build.directory 参数无效
- 文件互相覆盖导致只有最后完成的制品被保留
- 只有 Android APK 被归档(因为它使用独立的 Gradle 构建)

解决方案:
- 移除无效的 -Dmaven.build.directory 参数
- 移除不必要的 target 目录复制(准备打包阶段)
- 每个打包任务完成后立即复制文件到最终位置
- 添加文件大小显示以便验证
- 添加错误检查,打包失败时 exit /b 1

Changes:
- CLI: 打包后立即复制 slms-cli.jar
- GUI: 打包后立即复制 slms-gui.jar
- Web: 打包后立即复制 slms-web.war
- 简化准备打包阶段

预期结果:
- 所有四端制品都能正确归档
- CLI、GUI、Web JAR/WAR 文件不再丢失
main
Jenkins CI 5 months ago
parent 6384ea1fac
commit b8974fca7d

79
Jenkinsfile vendored

@ -152,22 +152,23 @@ pipeline {
expression { currentBuild.result == null || currentBuild.result == 'SUCCESS' || currentBuild.result == 'UNSTABLE' }
}
steps {
echo '========== 复制 target 目录用于并行打包 =========='
echo '========== 准备并行打包 =========='
bat '''
REM 为 CLI、GUI、Web、Android 创建独立的 target 副本
echo 复制 target 到 target-cli...
xcopy /E /I /Y /Q target target-cli >nul
echo 复制 target 到 target-gui...
xcopy /E /I /Y /Q target target-gui >nul
echo 复制 target 到 target-web...
xcopy /E /I /Y /Q target target-web >nul
echo 复制 target 到 target-android...
xcopy /E /I /Y /Q target target-android >nul
echo 检查编译结果...
if exist target\\classes (
echo ✓ 编译完成classes 目录存在
) else (
echo ⚠️ 警告: classes 目录不存在
)
echo ✓ target 目录复制完成4份准备并行打包
echo.
echo 准备开始四端并行打包:
echo • CLI: 使用 -Pcli profile
echo • GUI: 使用 -Pgui-swing profile
echo • Web: 使用 -Pweb profile
echo • Android: 使用 Gradle
echo.
echo ✓ 准备完成,开始并行打包
'''
}
}
@ -182,24 +183,27 @@ pipeline {
echo '========== 打包 CLI 应用 (JAR) =========='
bat '''
set JAVA_HOME=%JAVA_HOME%
echo 使用 target-cli 打包 CLI 应用...
echo 打包 CLI 应用...
REM 临时设置 Maven 输出目录为 target-cli
mvn package -Pcli -DskipTests -Dmaven.compiler.skip=true -Dmaven.build.directory=target-cli
REM 使用 CLI profile 打包
mvn package -Pcli -DskipTests -Dmaven.compiler.skip=true
REM 复制生成的 shaded JAR 到 target
if exist target-cli\\smart-library-management-system-1.0-SNAPSHOT-cli-shaded.jar (
copy /Y target-cli\\smart-library-management-system-1.0-SNAPSHOT-cli-shaded.jar target\\slms-cli.jar
REM 立即复制生成的 shaded JAR避免被其他并行任务覆盖
if exist target\\smart-library-management-system-1.0-SNAPSHOT-cli-shaded.jar (
copy /Y target\\smart-library-management-system-1.0-SNAPSHOT-cli-shaded.jar target\\slms-cli.jar
echo ✓ CLI JAR 打包完成: slms-cli.jar
for %%F in (target\\slms-cli.jar) do echo 大小: %%~zF bytes
) else (
echo ⚠️ 警告: 找不到 CLI shaded JAR
dir target-cli
echo ⚠️ 错误: 找不到 CLI shaded JAR
echo 检查 target 目录:
dir target\\*.jar
exit /b 1
)
REM 复制 library.db 到 target 目录
REM 复制 library.db
if exist library.db (
copy /Y library.db target\\
echo ✓ 已复制 library.db 到 target 目录
copy /Y library.db target\\library.db
echo ✓ 已复制 library.db
)
'''
echo '✓ CLI JAR 打包成功'
@ -291,21 +295,26 @@ pipeline {
echo '========== 打包 Web 应用 (WAR) =========='
bat '''
set JAVA_HOME=%JAVA_HOME%
echo 使用 target-web 打包 Web 应用...
echo 打包 Web 应用...
REM 临时设置 Maven 输出目录为 target-web
mvn package -Pweb -DskipTests -Dmaven.compiler.skip=true -Dmaven.build.directory=target-web
REM 使用 Web profile 打包
mvn package -Pweb -DskipTests -Dmaven.compiler.skip=true
REM 复制生成的 WAR 到 target
if exist target-web\\smart-library-management-system-1.0-SNAPSHOT.war (
copy /Y target-web\\smart-library-management-system-1.0-SNAPSHOT.war target\\slms-web.war
REM 立即复制生成的 WAR避免被其他并行任务覆盖
if exist target\\smart-library-management-system-1.0-SNAPSHOT.war (
copy /Y target\\smart-library-management-system-1.0-SNAPSHOT.war target\\slms-web.war
echo ✓ Web WAR 打包完成: slms-web.war
) else if exist target-web\\smart-library-management-system-1.0-SNAPSHOT.jar (
copy /Y target-web\\smart-library-management-system-1.0-SNAPSHOT.jar target\\slms-web.jar
for %%F in (target\\slms-web.war) do echo 大小: %%~zF bytes
) else if exist target\\smart-library-management-system-1.0-SNAPSHOT.jar (
copy /Y target\\smart-library-management-system-1.0-SNAPSHOT.jar target\\slms-web.jar
echo ✓ Web JAR 打包完成: slms-web.jar (备用)
for %%F in (target\\slms-web.jar) do echo 大小: %%~zF bytes
) else (
echo ⚠️ 警告: 找不到 Web WAR/JAR
dir target-web
echo ⚠️ 错误: 找不到 Web WAR/JAR
echo 检查 target 目录:
dir target\\*.war
dir target\\*.jar
exit /b 1
)
'''
echo '✓ Web WAR 打包成功'

Loading…
Cancel
Save