#!/usr/bin/env bash # =========================================================== # start.sh — daycard-openapi 后端一键启动脚本 # 项目: Spring Boot 2.6.6 / Java 17 / 端口 8084 # # 用法: # ./start.sh # clean 后启动(推荐) # ./start.sh --no-clean # 跳过 clean,加速重复启动 # ./start.sh -Dspring-boot.run.jvmArguments="-Dserver.port=8090" # # 透传任意 maven / spring-boot 参数 # =========================================================== set -euo pipefail cd "$(dirname "$0")" # ---- 1. 选定 Java 17(找不到则回退 Java 8)---- JDK17_PREF="/Users/zhaoguodong/Library/Java/JavaVirtualMachines/jbr-17.0.14/Contents/Home" if [[ -d "$JDK17_PREF" ]]; then export JAVA_HOME="$JDK17_PREF" elif JDK17_AUTO="$(/usr/libexec/java_home -v 17 2>/dev/null)"; then export JAVA_HOME="$JDK17_AUTO" elif JDK8_AUTO="$(/usr/libexec/java_home -v 1.8 2>/dev/null)"; then export JAVA_HOME="$JDK8_AUTO" echo "⚠️ 未找到 Java 17,回退到 Java 8" >&2 else echo "❌ 找不到 Java 17 或 Java 8,请安装 JDK 或修改本脚本里的 JAVA_HOME" >&2 exit 1 fi echo "==> JAVA_HOME=$JAVA_HOME" "$JAVA_HOME/bin/java" -version # ---- 2. 解析参数 ---- DO_CLEAN=1 PASSTHRU=() for arg in "$@"; do case "$arg" in --no-clean) DO_CLEAN=0 ;; --clean) DO_CLEAN=1 ;; *) PASSTHRU+=("$arg") ;; esac done # ---- 3. 启动 ---- # clean 可清掉 target 中残留的 stale class(曾出现 AsApplication 2.class # 导致“找到两个 main class”无法启动的问题)。 GOAL="spring-boot:run" if [[ "$DO_CLEAN" -eq 1 ]]; then GOAL="clean spring-boot:run" echo "==> mvn clean spring-boot:run" else echo "==> mvn spring-boot:run" fi mvn $GOAL "${PASSTHRU[@]+"${PASSTHRU[@]}"}"