#!/usr/bin/env bash # 将 V1 / V2 JAR 复制到与各目录 application.properties 同路径,便于 java -jar 启动。 # # 可选:PARITY_PATCH_V1_DATA=1 时,在复制 V1 fat-jar 后,用当前 Maven 构建的 # cw-elevator-application-data 模块 JAR **覆盖** fat-jar 内 lib/cw-elevator-application-data-1.0-SNAPSHOT.jar #(文件名不变,仅替换字节码)。用于 V1/V2 对拍:消除历史运行包内嵌 data 层与源码分支分叉导致的 # ShardingSphere「no table route」等非业务差异。手工比对「纯正历史 V1」时请 unset 或设为 0。 set -euo pipefail DEPLOY="$(cd "$(dirname "$0")" && pwd)" MAVEN="$(cd "$DEPLOY/.." && pwd)" REPO="$(cd "$MAVEN/.." && pwd)" V1_SRC="${REPO}/cw-elevator-application-V1.0.0.20211103/cw-elevator-application-V1.0.0.20211103.jar" V2_VER="${V2_VER:-2.0.7}" V2_JAR_NAME="cw-elevator-application-${V2_VER}.jar" V2_TGT="${MAVEN}/cw-elevator-application-starter/target/${V2_JAR_NAME}" # 发布目录命名:cw-elevator-application-V<版本>./(与 V1 运行包风格一致) V2_BUNDLE="$(ls -1dt "${MAVEN}/releases"/cw-elevator-application-V"${V2_VER}".* 2>/dev/null | head -1 || true)" V2_REL="" if [[ -n "${V2_BUNDLE}" ]]; then V2_REL="${V2_BUNDLE}/${V2_JAR_NAME}" fi if [[ -z "${V2_REL}" || ! -f "${V2_REL}" ]]; then V2_LEGACY="${MAVEN}/releases/v${V2_VER}/${V2_JAR_NAME}" if [[ -f "${V2_LEGACY}" ]]; then V2_REL="${V2_LEGACY}" fi fi PATCH_V1_DATA="${PARITY_PATCH_V1_DATA:-0}" DATA_NEW="${MAVEN}/cw-elevator-application-data/target/cw-elevator-application-data-2.0-SNAPSHOT.jar" if [[ ! -f "$V1_SRC" ]]; then echo "ERROR: 未找到 V1 JAR: $V1_SRC" >&2 exit 1 fi # 优先 target:本地 mvn package 后应与 deploy 同步,避免 releases 里旧包盖住新构建。 V2_SRC="" if [[ -f "$V2_TGT" ]]; then V2_SRC="$V2_TGT" elif [[ -f "$V2_REL" ]]; then V2_SRC="$V2_REL" else echo "ERROR: 未找到 V2 JAR(请先 mvn package,或运行 scripts/release-cw-elevator-application.sh ${V2_VER}):" >&2 echo " ${V2_TGT}" >&2 echo " 或 releases/cw-elevator-application-V${V2_VER}.<日期>/${V2_JAR_NAME}" >&2 exit 1 fi install -m0644 "$V1_SRC" "${DEPLOY}/v1-legacy/cw-elevator-application-V1.0.0.20211103.jar" install -m0644 "$V2_SRC" "${DEPLOY}/v2-maven/${V2_JAR_NAME}" V1_OUT="${DEPLOY}/v1-legacy/cw-elevator-application-V1.0.0.20211103.jar" if [[ "$PATCH_V1_DATA" == "1" ]]; then if [[ ! -f "$DATA_NEW" ]]; then echo "WARN: PARITY_PATCH_V1_DATA=1 但未找到 Maven data 模块产物,跳过覆盖: $DATA_NEW" >&2 else # Spring Boot 可执行 fat-jar 要求 lib/*.jar 以 ZIP STORED(无压缩)存放;jar uf 会压缩嵌套 JAR, # 导致 JarLauncher 报错「nested jar files must be stored without compression」。 TMPDIR="$(mktemp -d)" mkdir -p "${TMPDIR}/lib" cp -f "$DATA_NEW" "${TMPDIR}/lib/cw-elevator-application-data-1.0-SNAPSHOT.jar" zip -d "$V1_OUT" "lib/cw-elevator-application-data-1.0-SNAPSHOT.jar" 2>/dev/null || true (cd "$TMPDIR" && zip -q -0 "$V1_OUT" lib/cw-elevator-application-data-1.0-SNAPSHOT.jar) rm -rf "$TMPDIR" echo "OK: 已用当前构建 data 模块覆盖 V1 fat-jar 内 lib/cw-elevator-application-data-1.0-SNAPSHOT.jar(STORE,对拍专用)" fi fi echo "OK: V1 -> deploy/v1-legacy/" echo "OK: V2 -> deploy/v2-maven/" ls -la "${DEPLOY}/v1-legacy/"*.jar "${DEPLOY}/v2-maven/"*.jar