You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
digital-rmb-backend/docs/superpowers/plans/2026-08-03-java8-downgrade.md

52 lines
2.8 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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`,确认可执行包生成成功。