#!/usr/bin/env bash # # 开发环境启动脚本。 # # 项目要求 Java 25(maven.compiler.release=25),系统默认 JDK 可能是 17, # 直接跑 ./mvnw 会报 "release version 25 not supported",所以这里固定 JDK。 # # 用法: # ./run.sh 使用 dev profile(连本地 MySQL / Redis) # ./run.sh demo 使用 demo profile(H2 + 内存缓存,零外部依赖) # ./run.sh dev --server.port=8081 # JDK25_HOME=/path/to/jdk ./run.sh # set -euo pipefail JDK25_HOME="${JDK25_HOME:-$HOME/Library/Java/JavaVirtualMachines/temurin-25.jdk}" # macOS 的 .jdk 是 bundle 结构,真正的 JDK 根目录在 Contents/Home; # 也兼容直接指向 JDK 根目录的情况。 if [[ -x "$JDK25_HOME/Contents/Home/bin/java" ]]; then JDK25_HOME="$JDK25_HOME/Contents/Home" fi if [[ ! -x "$JDK25_HOME/bin/java" ]]; then echo "未找到 JDK 25:$JDK25_HOME" >&2 echo "可通过 JDK25_HOME=/path/to/jdk25 ./run.sh 指定其他位置" >&2 exit 1 fi export JAVA_HOME="$JDK25_HOME" export PATH="$JAVA_HOME/bin:$PATH" cd "$(dirname "$0")" # JDK 23 起 sun.misc.Unsafe 的内存访问方法被标记为「最终弃用」, # Netty(来自 Lettuce/Redis)内部仍在使用,启动时会打印 WARNING。 APP_JVM_ARGS="${APP_JVM_ARGS:---sun-misc-unsafe-memory-access=allow}" PROFILE="${1:-dev}" if [[ "$PROFILE" == "demo" ]]; then # demo 需要 H2,而 H2 只在 -Pdemo 时是 runtime 依赖 MVN_PROFILE=(-Pdemo) shift || true else MVN_PROFILE=() shift || true fi echo "JDK: $("$JAVA_HOME/bin/java" -version 2>&1 | head -1)" echo "Profile: $PROFILE" if [[ $# -gt 0 ]]; then exec ./mvnw -q "${MVN_PROFILE[@]}" spring-boot:run \ -Dspring-boot.run.profiles="$PROFILE" \ -Dspring-boot.run.jvmArguments="$APP_JVM_ARGS" \ -Dspring-boot.run.arguments="$*" fi exec ./mvnw -q "${MVN_PROFILE[@]}" spring-boot:run \ -Dspring-boot.run.profiles="$PROFILE" \ -Dspring-boot.run.jvmArguments="$APP_JVM_ARGS"