mirror of
https://gitee.com/jzsw-it/yexuejc-base.git
synced 2026-10-25 17:20:19 +08:00
- 新增 代码质量全量修复报告.md(含4分支验证矩阵+兼容性详情) - CHANGELOG 记录全部 Blocker/Major/Minor 修复项 - 标注破坏性变更
9.6 KiB
9.6 KiB
yexuejc-base 代码质量全量修复报告
项目:
yexuejc-basev2.0.0-jre21
修复日期: 2026-05-16
审计标准: SonarLint / Checkstyle 级别
分支规则: jre21(主) / jre17 / jre11 / jre8 兼容对应 JDK
一、修复总览
| 指标 | 数值 |
|---|---|
| 修改源文件数 | 23 个 |
| 修改测试文件数 | 1 个 |
| 代码变更 | +488 / -511 行 |
| 涉及分支 | 4 个 (jre21/jre17/jre11/jre8) |
各分支验证结果矩阵
| 分支 | JDK 版本 | 编译 | 测试通过 | 测试总数 | 失败 | 状态 |
|---|---|---|---|---|---|---|
| jre21 | JDK 21.0.6 | ✅ | ✅ | 358 | 0 | 🟢 全通过 |
| jre17 | JDK 17.0.13 | ✅ | ⚠️ | 358 | 2 | 🟡 预存失败 |
| jre11 | JDK 11.0.25 | ✅ | ⚠️ | 358 | 2 | 🟡 预存失败 |
| jre8 | JDK 1.8.0_432 | ✅ | ⚠️ | 358 | 2 | 🟡 预存失败 |
注: 2 个预存失败均为
CsvUtilTest中 CSV 特殊字符/换行符处理在 JDK 17/11/8 与 JDK 21 行为差异,非本次修改引入。
二、Blocker 级别修复(7 项 → 全部完成 ✅)
| # | 文件 | 问题 | 修复内容 | 影响分支 |
|---|---|---|---|---|
| 1 | RSA.java:262 | switch 表达式(Java 12+) |
改为 if-else-if 链式(jre8/jre11降级)/保留 switch 表达式(jre21) | jre8, jre11 |
| 2 | JwtUtil.java:173 | var 关键字(Java 10+) |
改为显式类型 io.jsonwebtoken.JwtBuilder |
jre8, jre10, jre11 |
| 3 | JwtUtil.java:52 | instace() 拼写错误 |
重命名为 instance(),内部类 Instace → Instance |
全分支 (破坏性变更) |
| 4 | RequestHeader.java:121 | geRespTime() 拼写错误 |
重命名为 getRespTime() |
全分支 (破坏性变更) |
| 5 | FileUtil.java:295 | connectBytes() 数组拷贝 Bug |
修正 System.arraycopy 的 length 参数为正确值 |
全分支 |
| 6 | ImgUtil.java:266 | 同上数组拷贝越界 | 同上修正 | 全分支 |
| 7 | ObjUtil.java:393 | System.out.println 残留 |
替换为 log.log(Level.WARNING, ...) |
全分支 |
⚠️ 破坏性 API 变更(调用方需同步)
| 原 API (已废弃) | 新 API | 说明 |
|---|---|---|
JwtUtil.instace() |
JwtUtil.instance() |
方法名 + 内部类名同步修正 |
.geRespTime() |
.getRespTime() |
RequestHeader getter 拼写修正 |
BaseVO.Mdfy |
BaseVO.Modify |
接口命名规范化,Mdfy 标记 @Deprecated 并继承 Modify |
MoneyUtil.toFen() 返回 int |
返回 long |
防止大金额溢出 |
三、Major 级别修复(16 类 ~60+ 处)
3.1 Javadoc 补全(最大类问题,~50+ 处)
| 文件 | 修复方法数 | 主要改进 |
|---|---|---|
| DateTimeUtil.java | 30+ | 所有方法的 @param/@return 从空标签补全为中文描述 |
| FileInput.java | 12 | 全部 public 方法的参数说明 + Scanner 改 try-with-resources |
| AlgorithmUtil.java | 5 | Javadoc 格式规范 + StringBuffer→StringBuilder |
| MoneyUtil.java | 6 | Javadoc 补全 + toFen() 返回类型 int→long |
| ExcelImportUtil.java | 3 | @param/@return + validateExcel() 逻辑简化 |
| MapRemoveNullUtil.java | 3 | @param 描述 + 删除死代码 remove() |
| FileUtil.java | 8+ | 半数方法 Javadoc + isFileExist 参数类型修正 |
| JsonUtil.java | 4 | TODO 明确化 + 异常处理改进(加 SEVERE 日志) |
| SysUtil.java | 10+ | ThreadPoolExecutor 修复 + DecimalFormat ThreadLocal |
| BaseException/BaseRuntimeException | 4 | @return 描述补充 + @Serial 注解 |
| DateConsts.java | 13 | @since 标签 + 全部常量字段注释 |
| SymbolicConsts.java | 6 | EMPTY/EQUAL/BAR 等 6 常量补注释 |
| LocalDateTimeSerializer.java | 4 | serialize() 完整 @param/@return/@throws |
| BaseVO.java | 2 | serialVersionUID @Serial + Mdfy→Modify |
3.2 逻辑/性能修复
| 文件 | 问题 | 修复方案 |
|---|---|---|
| SysUtil.java | ThreadPoolExecutor 创建后立即 shutdown | 改为 submit 后 shutdown + awaitTermination(60s) |
| SysUtil.java | DecimalFormat 非线程安全 | 改用 ThreadLocal |
| MoneyUtil.java | DecimalFormat 每次 new | 同上 ThreadLocal 优化 |
| MoneyUtil.java | toFen() 返回 int 可能溢出 | 返回类型改为 long |
| MapRemoveNullUtil.java | 死代码 remove() 方法未使用 | 直接删除 |
| FileUtil.java | readBigFile CSV 异常包装不一致 | BaseException 不再包装为 RuntimeException |
| RSA2.java | 异常消息硬编码字符串 | 改用 ExpCode.SYSTEM_ERROR 常量 |
| CsvUtil.java | 缺少 Copyright 头部 + author 不一致 | 加 MIT Copyright + @author 统一为 yexuejc |
| ZipUtil.java | createZipFile 缺少 @throws | 加 @throws ZipException |
四、Minor 级别修复(10 项)
| # | 文件 | 问题 | 处理方式 |
|---|---|---|---|
| 1 | 多文件 (4处) | serialVersionUID 缺少 @Serial |
jre21 加 @Serial;旧分支移除(Java 16+) |
| 2 | BaseVO.java | 内部接口 Mdfy 命名不规范 | 新增 Modify 接口,Mdfy 标记 @Deprecated 并继承 |
| 3 | AlgorithmUtil.java | StringBuffer → StringBuilder | 已替换 |
| 4 | FileInput.java | Scanner 未用 try-with-resources | 已修改 |
| 5 | DateTimeUtil.java | 注释掉的 main 方法块 | 已清理 |
| 6 | JsonUtil.java | TODO 标记 | 已明确优化方向注释 |
| 7 | MapRemoveNullUtil.java | 死代码 remove() | 已删除 |
| 8-9 | MoneyUtil/SysUtil.java | DecimalFormat 线程安全 | 已改 ThreadLocal |
| 10 | RSA.java | volatile 字段直接暴露 | 记录待后续架构优化 |
五、跨分支兼容性处理
5.1 Java 版本专属语法(jre21 保留新特性)
| 语法特性 | 引入版本 | jre21 | jre17 | jre11 | jre8 |
|---|---|---|---|---|---|
switch 表达式(箭头) |
Java 14 | ✅ 用 | ❌ 降级if-else | ❌ | ❌ |
var 局部变量推断 |
Java 10 | ❌ 显式类型 | ❌ | ❌ | ❌ |
| instanceof pattern matching | Java 21(预览→正式) | ✅ 用 | ❌ 强制转型 | ❌ | ❌ |
@Serial 注解 |
Java 16 | ✅ 用 | ❌ 移除 | ❌ 移除 | ❌ 移除 |
System.Logger |
Java 9 | ✅ 用 | ✅ | ✅ | ❌ java.util.logging.Logger |
Files.writeString() |
Java 11 | ✅ 用 | ✅ | ✅ | ❌ 自定义writeString |
Optional.isEmpty() |
Java 11 | ✅ 用 | ✅ | ❌ !isPresent | ❌ |
List.of() |
Java 9 | ✅ 用 | ✅ | ✅ | ❌ Arrays.asList |
jakarta.validation |
EE 9+ | ✅ 用 | ✅ | ✅ | ✅ |
5.2 各分支额外修改汇总
jre17 分支
- pom.xml 替换:原 pom.xml 含大量乱码注释和未闭合 XML 注释导致 Maven 解析失败
jre11 分支(比 jre17 多 4 处降级)
- RSA.java: instanceof pattern matching → 2处显式强制转型
- BaseException/BaseRuntimeException: 同上各 1处
- 移除 4 处 @Serial 注解 + import
- PagerVO.java: javax.validation → jakarta.validation
jre8 分支(比 jre11 多 4 处额外降级)
- RSA.java: System.Logger → java.util.logging.Logger(2处引用)
- RSA.java: Files.writeString() → 自定义 writeString 兼容方法(新增 import Path/BufferedWriter)
- StrUtil.java: Optional.isEmpty() → !isPresent()
- 测试文件(3个): List.of() → Arrays.asList(共 20+ 处)
六、测试结果详情
jre21 分支(主分支,JDK 21.0.6)
Tests run: 358, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS ✅
按测试类分布:
| 测试类 | 通过 | 失败 | 错误 |
|---|---|---|---|
| ConverterTest | 31 | 0 | 0 |
| AESEnhancedTest | 11 | 0 | 0 |
| AESTest | 16 | 0 | 0 |
| Base64MigrationTest | 5 | 0 | 0 |
| DES3NewTest | 13 | 0 | 0 |
| DES3Test | 10 | 0 | 0 |
| RSA2Test | 14 | 0 | 0 |
| RSATest | 4 | 0 | 0 |
| BaseExceptionTest | 3 | 0 | 0 |
| AlgorithmUtilTest | 21 | 0 | 0 |
| CsvUtilBeanTest | 8 | 0 | 0 |
| CsvUtilExample | — | 0 | 0 |
| CsvUtilTest | 19 | 0 | 0 |
| DateTimeUtilTest | 34 | 0 | 0 |
| DateUtilTest | 6 | 0 | 0 |
| ExcelImportUtilTest | 10 | 0 | 0 |
| IdcardValidatorTest | 16 | 0 | 0 |
| ImgUtilTest | 14 | 0 | 0 |
| JsonUtilTest | 2 | 0 | 0 |
| JwtUtilTest | 2 | 0 | 0 |
| MapRemoveNullUtilTest | 9 | 0 | 0 |
| MoneyUtilTest | 13 | 0 | 0 |
| MsgUtilTest | 2 | 0 | 0 |
| ObjUtilEnhancedTest | 10 | 0 | 0 |
| ObjUtilTest | 3 | 0 | 0 |
| RegexUtilTest | 27 | 0 | 0 |
| StrUtilEnhancedTest | 25 | 0 | 0 |
| StrUtilTest | 24 | 0 | 0 |
| SysUtilTest | 6 | 0 | 0 |
| 合计 | 358 | 0 | 0 |
七、提交记录
| 分支 | Commit Hash | 说明 |
|---|---|---|
| jre21 | 8355e4b |
fix(quality): 全量代码质量修复 - Major/Minor级别 |
| jre17 | 9e594bf |
fix(build): 修复pom.xml乱码 + 同步jre21修复 |
| jre11 | 03f685c |
fix(quality): 同步jre21修复 + JDK11兼容性降级 |
| jre8 | 4cb47dd |
fix(quality): 同步jre21修复 + JDK8兼容性降级 |
八、遗留技术债务
| 优先级 | 项目 | 说明 | 建议 |
|---|---|---|---|
| P1 | CsvUtilTest 2个失败 | CSV 特殊字符/换行符在 JDK 17/11/8 与 21 行为不一致 | 排查 JDK 差异根因或调整测试断言 |
| P2 | RSA.java volatile 字段 | algorithm/transformation 等直接暴露 | 考虑 builder 模式或 factory 重构 |
| P2 | 日志框架统一 | 项目混合使用 java.util.logging 和 System.Logger | 统一选择一种(建议 SLF4J) |
| P3 | bouncycastle 版本 | pom.xml 使用 jdk18on 后缀版本 | jre8 分支可能需要 jdkon 版本 |
报告生成时间: 2026-05-16 00:40 执行引擎: Code Reviewer Expert (SonarLint / Checkstyle 标准)