diff --git a/logic-ide/pom-xml-flattened b/logic-ide/pom-xml-flattened
deleted file mode 100644
index bd041d2..0000000
--- a/logic-ide/pom-xml-flattened
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
- 4.0.0
-
- com.aims.logic
- logic-solution
- 0.10-SNAPSHOT
-
- com.aims.logic
- logic-ide
- 0.10-SNAPSHOT
- logic-ide
- logic-ide
-
-
- nexus-releases
- https://nexus.aimstek.cn/repository/maven-releases/
-
-
- nexus-snapshots
- https://nexus.aimstek.cn/repository/maven-snapshots/
-
-
-
- 17
-
-
-
-
- org.springframework.boot
- spring-boot-dependencies
- 2.7.2
- pom
- import
-
-
-
-
-
- com.aims.logic
- logic-sdk
- ${logic-sdk.version}
-
-
- com.github.javaparser
- javaparser-core
- 3.25.5
-
-
- org.springframework.boot
- spring-boot-starter-web
- 2.7.2
-
-
- org.springframework.boot
- spring-boot-starter-webflux
-
-
- org.redisson
- redisson
- 3.23.5
-
-
-
-
- nexus
- 公司镜像仓库
- https://nexus.aimstek.cn/repository/maven-public
-
-
-
-
-
- maven-compiler-plugin
- 3.8.1
-
- true
-
-
-
-
-
diff --git a/logic-ide/pom.xml b/logic-ide/pom.xml
index 84c4006..3a09fb8 100644
--- a/logic-ide/pom.xml
+++ b/logic-ide/pom.xml
@@ -15,17 +15,6 @@
17
-
-
-
- org.springframework.boot
- spring-boot-dependencies
- 2.7.2
- pom
- import
-
-
-
@@ -42,7 +31,6 @@
org.springframework.boot
spring-boot-starter-web
- 2.7.2
diff --git a/logic-sdk/pom-xml-flattened b/logic-sdk/pom-xml-flattened
index 6af39b0..e71e7c5 100644
--- a/logic-sdk/pom-xml-flattened
+++ b/logic-sdk/pom-xml-flattened
@@ -44,12 +44,10 @@
org.springframework.boot
spring-boot-starter-aop
- 2.7.2
org.springframework.boot
spring-boot-starter-jdbc
- 2.7.2
org.redisson
diff --git a/logic-sdk/pom.xml b/logic-sdk/pom.xml
index cb705db..48d5e16 100644
--- a/logic-sdk/pom.xml
+++ b/logic-sdk/pom.xml
@@ -40,12 +40,10 @@
org.springframework.boot
spring-boot-starter-aop
- 2.7.2
org.springframework.boot
spring-boot-starter-jdbc
- 2.7.2
org.redisson
diff --git a/pom-xml-flattened b/pom-xml-flattened
index 0a7c513..1d6330b 100644
--- a/pom-xml-flattened
+++ b/pom-xml-flattened
@@ -33,6 +33,17 @@
0.10-SNAPSHOT
0.10-SNAPSHOT
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+
org.projectlombok
@@ -43,12 +54,10 @@
org.springframework.boot
spring-boot-starter
- 2.7.2
org.springframework.boot
spring-boot-starter-test
- 2.7.2
test
@@ -93,4 +102,21 @@
+
+
+ spring-boot-2
+
+ true
+
+
+ 2.7.2
+
+
+
+ spring-boot-3
+
+ 3.2.5
+
+
+
diff --git a/pom.xml b/pom.xml
index 4653804..6e4ba99 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,6 +25,17 @@
17
17
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+
logic-runtime
logic-sdk
@@ -65,13 +76,11 @@
org.springframework.boot
spring-boot-starter
- 2.7.2
org.springframework.boot
spring-boot-starter-test
test
- 2.7.2
@@ -117,4 +126,21 @@
+
+
+ spring-boot-2
+
+ true
+
+
+ 2.7.2
+
+
+
+ spring-boot-3
+
+ 3.2.5
+
+
+
diff --git a/readme.md b/readme.md
index 7f2dcb6..c26949c 100644
--- a/readme.md
+++ b/readme.md
@@ -50,6 +50,24 @@ mvn spring-boot:run
访问 http://localhost:8888 查看管理界面。
+## 本地兼容性验证
+
+项目引入了 `spring-boot-2`(默认启用)与 `spring-boot-3` 两个 Maven Profile,用于分别拉起 Spring Boot 2.7.x 与 3.2.x 的依赖栈来编译和验证 `logic-ide` 模块及其依赖。
+
+一键执行两个 Profile 构建可运行以下脚本:
+
+```bash
+./scripts/verify-compatibility.sh
+```
+
+脚本会先后执行 `clean verify`,覆盖 `spring-boot-2` 与 `spring-boot-3` 两个 Profile;传入的额外参数会直接透传给 Maven。
+
+如需单独验证某个 Profile,可手动执行:
+
+```bash
+./mvnw -pl logic-ide -am clean verify -Pspring-boot-3
+```
+
### Maven 依赖
```xml
diff --git a/scripts/build-and-release.sh b/scripts/build-and-release.sh
new file mode 100644
index 0000000..446d9cb
--- /dev/null
+++ b/scripts/build-and-release.sh
@@ -0,0 +1,205 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+MVNW_BIN="${PROJECT_ROOT}/mvnw"
+
+# 默认参数
+SKIP_TESTS=false
+SKIP_DEPLOY=false
+DRY_RUN=false
+PROFILES=("spring-boot-2" "spring-boot-3")
+
+# 解析命令行参数
+while [[ $# -gt 0 ]]; do
+ case $1 in
+ --skip-tests)
+ SKIP_TESTS=true
+ shift
+ ;;
+ --skip-deploy)
+ SKIP_DEPLOY=true
+ shift
+ ;;
+ --dry-run)
+ DRY_RUN=true
+ shift
+ ;;
+ --profiles)
+ IFS=',' read -ra PROFILES <<< "$2"
+ shift 2
+ ;;
+ -h|--help)
+ echo "Logic-IDE 构建与发布脚本"
+ echo ""
+ echo "用法: $0 [选项]"
+ echo ""
+ echo "选项:"
+ echo " --skip-tests 跳过测试"
+ echo " --skip-deploy 跳过部署到仓库"
+ echo " --dry-run 模拟运行,不执行实际操作"
+ echo " --profiles 指定要构建的profiles (逗号分隔)"
+ echo " -h, --help 显示帮助信息"
+ echo ""
+ echo "示例:"
+ echo " $0 # 构建所有profiles"
+ echo " $0 --profiles spring-boot-2 # 只构建Spring Boot 2"
+ echo " $0 --dry-run # 模拟运行"
+ exit 0
+ ;;
+ *)
+ echo "未知参数: $1"
+ echo "使用 -h 或 --help 查看帮助"
+ exit 1
+ ;;
+ esac
+done
+
+echo "========================================"
+echo "Logic-IDE 构建与发布脚本"
+echo "========================================"
+echo "项目根目录: ${PROJECT_ROOT}"
+echo "Java版本: $(java -version 2>&1 | head -n 1)"
+echo "Maven版本: $("${MVNW_BIN}" --version | head -n 1)"
+echo "构建Profiles: ${PROFILES[*]}"
+echo "跳过测试: ${SKIP_TESTS}"
+echo "跳过部署: ${SKIP_DEPLOY}"
+echo "模拟运行: ${DRY_RUN}"
+echo ""
+
+# 获取当前版本
+CURRENT_VERSION=$("${MVNW_BIN}" -q -N help:evaluate -Dexpression=project.version -DforceStdout)
+echo "当前版本: ${CURRENT_VERSION}"
+
+# 检查版本是否为SNAPSHOT
+if [[ "$CURRENT_VERSION" == *"-SNAPSHOT" ]]; then
+ echo "⚠️ 当前为SNAPSHOT版本,将部署到快照仓库"
+ REPO_TYPE="snapshots"
+else
+ echo "✅ 当前为正式版本,将部署到发布仓库"
+ REPO_TYPE="releases"
+fi
+
+echo ""
+
+# 构建函数
+build_profile() {
+ local profile="$1"
+ echo ""
+ echo "========================================"
+ echo "构建 Profile: ${profile}"
+ echo "========================================"
+
+ local maven_goals=("clean")
+
+ if [[ "$SKIP_TESTS" == false ]]; then
+ maven_goals+=("verify")
+ else
+ maven_goals+=("install")
+ fi
+
+ local maven_args=(
+ "-pl" "logic-ide"
+ "-am"
+ "-P${profile}"
+ )
+
+ if [[ "$DRY_RUN" == false ]]; then
+ echo "执行命令: ${MVNW_BIN} ${maven_goals[*]} ${maven_args[*]}"
+ if "${MVNW_BIN}" "${maven_goals[@]}" "${maven_args[@]}"; then
+ echo "✅ Profile ${profile} 构建成功"
+ return 0
+ else
+ echo "❌ Profile ${profile} 构建失败"
+ return 1
+ fi
+ else
+ echo "模拟执行: ${MVNW_BIN} ${maven_goals[*]} ${maven_args[*]}"
+ echo "✅ Profile ${profile} 模拟构建成功"
+ return 0
+ fi
+}
+
+# 部署函数
+deploy_profile() {
+ local profile="$1"
+ echo ""
+ echo "========================================"
+ echo "部署 Profile: ${profile}"
+ echo "========================================"
+
+ if [[ "$SKIP_DEPLOY" == true ]]; then
+ echo "⏭️ 跳过部署 (skip-deploy)"
+ return 0
+ fi
+
+ if [[ "$DRY_RUN" == false ]]; then
+ echo "执行部署命令..."
+ if "${MVNW_BIN}" -pl logic-ide -am -P"${profile}" deploy -DskipTests; then
+ echo "✅ Profile ${profile} 部署成功"
+ return 0
+ else
+ echo "❌ Profile ${profile} 部署失败"
+ return 1
+ fi
+ else
+ echo "模拟部署 Profile ${profile}"
+ echo "✅ Profile ${profile} 模拟部署成功"
+ return 0
+ fi
+}
+
+# 执行构建
+FAILED_PROFILES=()
+for profile in "${PROFILES[@]}"; do
+ if build_profile "$profile"; then
+ echo "📦 Profile ${profile} 构建完成"
+ else
+ FAILED_PROFILES+=("${profile}")
+ fi
+done
+
+# 检查构建结果
+if [ ${#FAILED_PROFILES[@]} -ne 0 ]; then
+ echo ""
+ echo "========================================"
+ echo "构建失败"
+ echo "========================================"
+ echo "以下 profile 构建失败: ${FAILED_PROFILES[*]}"
+ exit 1
+fi
+
+# 执行部署
+FAILED_DEPLOYS=()
+for profile in "${PROFILES[@]}"; do
+ if ! deploy_profile "$profile"; then
+ FAILED_DEPLOYS+=("${profile}")
+ fi
+done
+
+# 最终结果
+echo ""
+echo "========================================"
+echo "构建与发布结果汇总"
+echo "========================================"
+
+if [ ${#FAILED_DEPLOYS[@]} -eq 0 ]; then
+ echo "🎉 所有操作完成!"
+ echo "版本: ${CURRENT_VERSION}"
+ echo "构建的Profiles: ${PROFILES[*]}"
+
+ if [[ "$SKIP_DEPLOY" == false && "$DRY_RUN" == false ]]; then
+ echo "✅ 已部署到 ${REPO_TYPE} 仓库"
+
+ # 提示创建Git tag
+ if [[ "$REPO_TYPE" == "releases" ]]; then
+ echo ""
+ echo "💡 建议创建Git tag:"
+ echo " git tag v${CURRENT_VERSION}"
+ echo " git push origin v${CURRENT_VERSION}"
+ fi
+ fi
+else
+ echo "💥 以下 profile 部署失败: ${FAILED_DEPLOYS[*]}"
+ exit 1
+fi
\ No newline at end of file
diff --git a/scripts/check-version-change.sh b/scripts/check-version-change.sh
new file mode 100644
index 0000000..be2f304
--- /dev/null
+++ b/scripts/check-version-change.sh
@@ -0,0 +1,102 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+MVNW_BIN="${PROJECT_ROOT}/mvnw"
+
+if [[ ! -x "${MVNW_BIN}" ]]; then
+ echo "Maven Wrapper not found or not executable at: ${MVNW_BIN}" >&2
+ exit 1
+fi
+
+echo "========================================"
+echo "Logic-IDE 版本变更检测脚本"
+echo "========================================"
+
+# 检查是否在 Git 仓库中
+if ! git rev-parse --git-dir > /dev/null 2>&1; then
+ echo "❌ 当前目录不是 Git 仓库"
+ exit 1
+fi
+
+# 获取当前和上一个提交的 hash
+CURRENT_COMMIT=$(git rev-parse HEAD)
+PREV_COMMIT=$(git rev-parse HEAD^ 2>/dev/null || echo "")
+
+if [[ -z "${PREV_COMMIT}" ]]; then
+ echo "⚠️ 没有上一个提交,这是初始提交"
+ PREV_COMMIT="4b825dc642cb6eb9a060e54bf8d69288fbee4904" # Empty tree hash
+fi
+
+echo "当前提交: ${CURRENT_COMMIT}"
+echo "上一个提交: ${PREV_COMMIT}"
+echo ""
+
+# 检查版本定义文件是否变更
+VERSION_FILES=("pom.xml" "logic-ide/pom.xml" "logic-sdk/pom.xml")
+CHANGED_VERSION_FILES=()
+
+for file in "${VERSION_FILES[@]}"; do
+ if git diff --name-only "${PREV_COMMIT}" "${CURRENT_COMMIT}" | grep -q "^${file}$"; then
+ CHANGED_VERSION_FILES+=("${file}")
+ fi
+done
+
+if [ ${#CHANGED_VERSION_FILES[@]} -eq 0 ]; then
+ echo "📋 版本定义文件未发生变更"
+ echo "检测的文件: ${VERSION_FILES[*]}"
+ exit 0
+fi
+
+echo "📝 检测到版本定义文件变更: ${CHANGED_VERSION_FILES[*]}"
+echo ""
+
+# 提取版本号并比较
+echo "提取版本号..."
+PREV_VERSION=$(git show "${PREV_COMMIT}:pom.xml" 2>/dev/null | "${MVNW_BIN}" -q -N help:evaluate -Dexpression=project.version -DforceStdout 2>/dev/null || echo "unknown")
+CURRENT_VERSION=$("${MVNW_BIN}" -q -N help:evaluate -Dexpression=project.version -DforceStdout 2>/dev/null || echo "unknown")
+
+echo "上一个版本: ${PREV_VERSION}"
+echo "当前版本: ${CURRENT_VERSION}"
+echo ""
+
+# 检查是否为语义化版本提升
+function is_version_bumped() {
+ local prev="$1"
+ local curr="$2"
+
+ # 处理未知版本
+ if [[ "$prev" == "unknown" || "$curr" == "unknown" ]]; then
+ return 1
+ fi
+
+ # 提取版本号(去掉 -SNAPSHOT 等后缀)
+ prev_clean=$(echo "$prev" | sed 's/-SNAPSHOT$//')
+ curr_clean=$(echo "$curr" | sed 's/-SNAPSHOT$//')
+
+ # 简单的版本号比较
+ if [[ "$prev_clean" != "$curr_clean" ]]; then
+ return 0
+ fi
+
+ return 1
+}
+
+if is_version_bumped "$PREV_VERSION" "$CURRENT_VERSION"; then
+ echo "🎉 检测到版本提升: ${PREV_VERSION} -> ${CURRENT_VERSION}"
+ echo "version_changed=true"
+ exit 0
+else
+ echo "📋 版本号未发生语义化提升"
+
+ # 检查提交信息是否包含发布关键词
+ COMMIT_MSG=$(git log --format=%B -n 1 "${CURRENT_COMMIT}")
+ if echo "$COMMIT_MSG" | grep -qiE "release|发布|版本"; then
+ echo "📝 提交信息包含发布关键词,触发发布流程"
+ echo "version_changed=true"
+ exit 0
+ fi
+
+ echo "version_changed=false"
+ exit 0
+fi
\ No newline at end of file
diff --git a/scripts/verify-compatibility.sh b/scripts/verify-compatibility.sh
new file mode 100755
index 0000000..dd4e134
--- /dev/null
+++ b/scripts/verify-compatibility.sh
@@ -0,0 +1,60 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+MVNW_BIN="${PROJECT_ROOT}/mvnw"
+
+if [[ ! -x "${MVNW_BIN}" ]]; then
+ echo "Maven Wrapper not found or not executable at: ${MVNW_BIN}" >&2
+ exit 1
+fi
+
+if [[ -z "${JAVA_HOME:-}" ]]; then
+ echo "JAVA_HOME is not set. Please export JAVA_HOME to a JDK 17 installation before running this script." >&2
+ exit 1
+fi
+
+echo "========================================"
+echo "Logic-IDE 兼容性验证脚本"
+echo "========================================"
+echo "项目根目录: ${PROJECT_ROOT}"
+echo "Java版本: $(java -version 2>&1 | head -n 1)"
+echo "Maven版本: $("${MVNW_BIN}" --version | head -n 1)"
+echo ""
+
+profiles=("spring-boot-2" "spring-boot-3")
+
+# 检查版本变更
+echo "检查版本变更..."
+CURRENT_VERSION=$("${MVNW_BIN}" -q -N help:evaluate -Dexpression=project.version -DforceStdout)
+echo "当前版本: ${CURRENT_VERSION}"
+
+# 运行兼容性测试
+FAILED_PROFILES=()
+for profile in "${profiles[@]}"; do
+ echo ""
+ echo "========================================"
+ echo "运行 Maven verify - Profile: ${profile}"
+ echo "========================================"
+
+ if "${MVNW_BIN}" -pl logic-ide -am clean verify -P"${profile}" "$@"; then
+ echo "✅ Profile ${profile} 验证成功"
+ else
+ echo "❌ Profile ${profile} 验证失败"
+ FAILED_PROFILES+=("${profile}")
+ fi
+done
+
+echo ""
+echo "========================================"
+echo "验证结果汇总"
+echo "========================================"
+
+if [ ${#FAILED_PROFILES[@]} -eq 0 ]; then
+ echo "🎉 所有 profile 验证通过!版本 ${CURRENT_VERSION} 兼容 Spring Boot 2 & 3"
+ exit 0
+else
+ echo "💥 以下 profile 验证失败: ${FAILED_PROFILES[*]}"
+ echo "请检查错误信息并修复后重试"
+ exit 1
+fi
diff --git a/test-suite/pom-xml-flattened b/test-suite/pom-xml-flattened
deleted file mode 100644
index b36acfa..0000000
--- a/test-suite/pom-xml-flattened
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
- 4.0.0
-
- com.aims.logic
- logic-solution
- 0.10-SNAPSHOT
-
- com.aims.logic
- test-suite
- 0.0.1-SNAPSHOT
- test-suite
- test-suite
-
- 17
-
-
-
- org.springframework.boot
- spring-boot-starter-web
- 2.7.2
-
-
- com.aims.logic
- logic-ide
- ${logic-ide.version}
-
-
- com.baomidou
- mybatis-plus-boot-starter
- 3.5.2
-
-
- org.springframework.boot
- spring-boot-starter-test
- 2.7.2
- test
-
-
- junit
- junit
- 4.13.2
- test
-
-
-
diff --git a/test-suite/pom.xml b/test-suite/pom.xml
index f34e136..62a2d8c 100644
--- a/test-suite/pom.xml
+++ b/test-suite/pom.xml
@@ -19,7 +19,6 @@
org.springframework.boot
spring-boot-starter-web
- 2.7.2
@@ -41,7 +40,6 @@
org.springframework.boot
spring-boot-starter-test
test
- 2.7.2
junit
diff --git "a/\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\344\270\216\345\217\221\345\270\203\350\256\276\350\256\241.md" "b/\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\344\270\216\345\217\221\345\270\203\350\256\276\350\256\241.md"
index 39658ea..686f0f9 100644
--- "a/\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\344\270\216\345\217\221\345\270\203\350\256\276\350\256\241.md"
+++ "b/\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\344\270\216\345\217\221\345\270\203\350\256\276\350\256\241.md"
@@ -168,7 +168,7 @@ jobs:
- 流水线执行日志保存 180 天,支持审计追溯。
## 实施里程碑建议
-1. **阶段一**:引入双 profile 与本地脚本,确保在开发机器可以一键验证两个版本。
+1. **阶段一**:引入 `spring-boot-2` / `spring-boot-3` 双 profile 并提供 `scripts/verify-compatibility.sh` 脚本,确保在开发机器可以一键验证两个版本。
2. **阶段二**:上线 PR 与版本检测流水线,完成自动化兼容性测试。
3. **阶段三**:接入发布仓库、生成 Release Note、打通通知。
4. **阶段四(优化)**:引入性能基准测试、Canary 发布、滚动回滚策略等高级能力。