#!/usr/bin/env bash # 将 V1 运行包 cw_lib 中的电梯四模块 jar 用 CFR 反编译到本仓库 tools/v1-decompiled/ 下, # 供与 maven-cw-elevator-application 源码逐类比对(不依赖历史 artifacts 手工目录)。 set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" MV_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" REPO_ROOT="$(cd "$MV_ROOT/.." && pwd)" # V1 解压目录(含 cw_lib) : "${V1_RUN_DIR:=${REPO_ROOT}/cw-elevator-application-V1.0.0.20211103}" CW_LIB="${V1_RUN_DIR}/cw_lib" # CFR:优先环境变量,其次仓库 artifacts : "${CFR_JAR:=${REPO_ROOT}/artifacts/decompiled/v1-cfr-compare-20211103/cfr-0.152.jar}" if [[ ! -f "$CFR_JAR" ]]; then echo "ERROR: CFR not found: $CFR_JAR" >&2 echo "Set CFR_JAR to a local cfr-*.jar path." >&2 exit 1 fi # 输出根目录(可用环境变量覆盖) : "${V1_DECOMP_OUT:=${MV_ROOT}/tools/v1-decompiled/cfr-from-cw-lib}" TIMESTAMP="$(date +%Y%m%d-%H%M%S)" OUT="${V1_DECOMP_OUT}-${TIMESTAMP}" FINAL_LINK="${MV_ROOT}/tools/v1-decompiled/cfr-from-cw-lib-current" MODULES=( "cw-elevator-application-common-1.0-SNAPSHOT.jar" "cw-elevator-application-data-1.0-SNAPSHOT.jar" "cw-elevator-application-service-1.0-SNAPSHOT.jar" "cw-elevator-application-web-1.0-SNAPSHOT.jar" ) echo "V1 cw_lib: $CW_LIB" echo "CFR: $CFR_JAR" echo "Output: $OUT" mkdir -p "$OUT" for j in "${MODULES[@]}"; do jar_path="${CW_LIB}/${j}" if [[ ! -f "$jar_path" ]]; then echo "WARNING: missing $jar_path — skip" continue fi mod="${j%.jar}" dest="${OUT}/${mod}" mkdir -p "$dest" echo ">>> Decompiling $j -> $dest" java -jar "$CFR_JAR" "$jar_path" \ --outputdir "$dest" \ --silent true done # 可选:V1 fat jar(体积大,默认关闭) if [[ "${DECOMPILE_V1_FAT_JAR:-0}" == "1" ]]; then FAT="${V1_RUN_DIR}/cw-elevator-application-V1.0.0.20211103.jar" if [[ -f "$FAT" ]]; then echo ">>> Decompiling fat jar (may take several minutes)..." java -jar "$CFR_JAR" "$FAT" \ --outputdir "${OUT}/cw-elevator-application-V1.0.0.20211103-fat" \ --silent true else echo "WARNING: fat jar not found: $FAT" fi fi # 写元数据 { echo "generated_utc: $(date -u +%Y-%m-%dT%H:%M:%SZ)" echo "v1_run_dir: $V1_RUN_DIR" echo "cfr_jar: $CFR_JAR" echo "modules:" for j in "${MODULES[@]}"; do echo " - $j"; done } > "${OUT}/MANIFEST.txt" ln -sfn "$OUT" "$FINAL_LINK" echo "" echo "Done. Latest symlink: $FINAL_LINK -> $OUT" echo "Manifest: ${OUT}/MANIFEST.txt"