From 4d95795c13f9027f60e20a842e717f2d7eaee3d4 Mon Sep 17 00:00:00 2001 From: chenyuan Date: Mon, 3 Aug 2026 14:49:40 +0800 Subject: [PATCH] docs: plan java 8 compatibility downgrade --- .../plans/2026-08-03-java8-downgrade.md | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docs/superpowers/plans/2026-08-03-java8-downgrade.md diff --git a/docs/superpowers/plans/2026-08-03-java8-downgrade.md b/docs/superpowers/plans/2026-08-03-java8-downgrade.md new file mode 100644 index 0000000..16ca13a --- /dev/null +++ b/docs/superpowers/plans/2026-08-03-java8-downgrade.md @@ -0,0 +1,51 @@ +# Java 8 Compatibility Downgrade Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 将后端降级为 Java 8 可编译、可运行的 Spring Boot 2.7 应用,同时保留现有认证、Flyway、Swagger 与 MyBatis-Plus 功能。 + +**Architecture:** 使用 Spring Boot 2.7.18 与 Spring Framework 5.3,恢复 `javax.*` Servlet/Validation API。所有 Java 17 record、文本块和 Spring 6 `JdbcClient` 改为 Java 8 POJO、字符串拼接和 `NamedParameterJdbcTemplate`;业务行为不改变。 + +**Tech Stack:** Java 8, Spring Boot 2.7.18, Spring Security 5.7, MyBatis-Plus 3.5.17, Springdoc 1.8.0, Flyway 8.x. + +## Global Constraints + +- Maven 必须以 `release 8` 编译;不得保留 Java 9+ 或 Java 17 语言/API 依赖。 +- 保持本系统 JWT、本地用户名密码登录、SSO/CAS、Flyway V3 用户初始化和 Swagger 地址不变。 +- 不修改主平台工程,不输出任何密码或 Token。 + +--- + +### Task 1: 切换依赖与编译目标 + +**Files:** +- Modify: `pom.xml` +- Modify: `src/main/java/com/yau/digitalrmb/shared/infrastructure/persistence/ApplicationDataSourceConfig.java` +- Test: `mvn -DskipTests compile -B` + +- [ ] 将父版本切换为 `2.7.18`,`java.version` 切换为 `1.8`,设置 `maven.compiler.release=8`。 +- [ ] 将 Web/Flyway/MyBatis-Plus/Springdoc 依赖替换为 Boot 2 对应 artifact:`spring-boot-starter-web`、`flyway-core`、`mybatis-plus-boot-starter`、`springdoc-openapi-ui:1.8.0`;移除 Boot 4 专用依赖。 +- [ ] 将 `DataSourceProperties` 导入改为 Boot 2 包路径。 +- [ ] 运行 `mvn -DskipTests compile -B`,以编译报错清单驱动后续兼容改造。 + +### Task 2: 改造 Java 17、Spring 6 与 Jakarta 代码 + +**Files:** +- Modify: 所有 `src/main/java/**` 中的 record、text block、`JdbcClient`、`jakarta.*` 和 Java 9+ API 调用 +- Modify: 对应 `src/test/java/**` 测试与 Boot 4 测试导入 + +- [ ] 将所有 record 变为带构造器、getter、`equals`/`hashCode` 的 Java 8 类;请求 DTO 提供 JavaBean getter,保留 Bean Validation。 +- [ ] 用 `NamedParameterJdbcTemplate` 替换 `JdbcClient`;用普通字符串替换 text block 和 `String.formatted`。 +- [ ] 将 Jakarta 包改为 `javax.*`,将 Boot 4 `AutoConfigureMockMvc` 包改为 Boot 2 包。 +- [ ] 用 `Collections`、显式 `switch`、`StringBuilder`/自定义十六进制转换替换 Java 9+ API。 +- [ ] 运行 `mvn test -DforkCount=0 -B`。 + +### Task 3: Java 8 运行时验证与文档 + +**Files:** +- Modify: `README.md` +- Modify: `docs/DEVELOPMENT_GUIDE.md` + +- [ ] 使用 JDK 8 执行 `java -version`、`mvn test` 和打包后的 JAR 启动验证。 +- [ ] 更新 README 与开发规范的 Java/Spring Boot 版本要求。 +- [ ] 运行 `mvn package -DskipTests -B`,确认可执行包生成成功。