# JavaToolBox **Repository Path**: BigDeng_Hh/java-tool-box ## Basic Information - **Project Name**: JavaToolBox - **Description**: 自定义Java开发中的工具类,包括开源框架的二次开发 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-02 - **Last Updated**: 2025-12-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 《Under-Utils 工具库开发规范与贡献指南》(Draft v1.0) ## 📌 目录 1. 项目背景 2. 项目目标 3. 工程结构规范 4. 模块划分规范 5. 依赖与版本管理规范(BOM) 6. 代码规范 7. 工具类开发规范 8. 命名规范 9. Git 协作流程 10. 分支策略 11. Pull Request & Code Review 规范 12. 单元测试规范 13. 文档规范 14. 版本号管理与发布流程 15. 质量保障要求 16. 安全规范 17. 未来扩展规划(预留给后续完善) --- ## 1. 项目背景 Under-Utils 是一个由多人维护的 **企业级 Java 工具库集合**,旨在统一各项目常用工具方法、封装逻辑、业务组件,避免重复造轮子,提高研发效率,保证各项目基础框架的一致性。 本规范文档用于指导: - 如何开发工具类模块 - 如何参与项目协作 - 如何管理依赖版本 - 如何保证质量与安全 - 如何发布可用版本 --- ## 2. 项目目标 - 形成一套稳定、可持续迭代的工具库体系 - 支持多人协作,规范清晰、边界明确 - 统一公司/个人所有项目的基础依赖版本 - 提供可复用、可维护、可扩展的公共能力 - 为后续开源或对外发布打基础,形成个人/团队技术品牌 --- ## 3. 工程结构规范 当前推荐的整体工程结构如下: ```text under-utils/ <-- 顶层聚合工程(Parent) ├── pom.xml <-- 父 POM(统一依赖 & 插件管理) │ ├── under-utils-bom/ <-- 依赖与版本统一管理(BOM) │ └── pom.xml │ ├── under-utils-core/ <-- 基础通用工具模块 │ └── src/main/java/com/undernine/utils/core/... │ ├── under-utils-http/ <-- HTTP 相关封装模块 │ └── src/main/java/com/undernine/utils/http/... │ ├── under-utils-redis/ <-- Redis 与分布式锁封装模块 │ └── src/main/java/com/undernine/utils/redis/... │ ├── under-utils-mybatis/ <-- MyBatis / MyBatis-Plus 增强模块 │ └── src/main/java/com/undernine/utils/mybatis/... │ ├── under-utils-spring/ <-- Spring 通用组件模块 │ └── src/main/java/com/undernine/utils/spring/... │ ├── under-utils-starter/ <-- Spring Boot Starter 自动配置模块 │ └── src/main/java/com/undernine/utils/starter/... │ ├── under-utils-biz/ <-- 可复用业务组件模块 │ └── src/main/java/com/undernine/utils/biz/... │ └── README.md <-- 本规范与整体说明文档 ``` **工程结构要求:** 1. 每个模块必须具备独立的 `pom.xml`,遵循单一职责原则。 2. 模块之间尽量避免循环依赖,必要依赖必须在文档中显式说明。 3. 通用、无框架耦合的工具优先放入 `under-utils-core`。 4. 与框架强相关的工具放入对应模块(如 Spring、MyBatis、Redis)。 5. 业务相关的可复用逻辑(短信、Excel 导出等)统一放入 `under-utils-biz`。 6. 新增模块时,请务必在 `under-utils-bom` 中声明版本号,且按照该项目进行统一命名。 --- ## 4. 模块划分规范 ### 4.1 模块职责说明 | 模块名 | 职责定位 | 依赖上限 | |-------------------------|-------------------------------------------|-----------------------------------| | under-utils-bom | 统一版本与依赖管理 BOM | 无业务代码 | | under-utils-core | 基础工具类:字符串、日期、金额、ID、加解密等 | 仅依赖 JDK | | under-utils-http | HTTP 请求封装(HttpClient/OkHttp/RestTemplate) | 可依赖 HTTP 相关第三方库 | | under-utils-redis | Redis 操作封装、分布式锁 | 依赖 Spring Data Redis / Redisson | | under-utils-mybatis | MyBatis / MyBatis-Plus 扩展、分页、元数据填充 | 依赖 MyBatis / MyBatis-Plus | | under-utils-spring | Spring 通用组件(返回体、异常、工具等) | 依赖 Spring Framework | | under-utils-starter | Spring Boot Starter 自动配置 | 依赖 Spring Boot | | under-utils-biz | 可复用业务组件(短信、上传、Excel 等) | 可依赖具体业务相关第三方库 | | under-utils-xxx (新增模块) | 按照项目进行统一命名 | 可依赖具体业务相关第三方库 | ### 4.2 新增模块要求 - 新增模块前必须经过评审(至少 1 人技术负责人确认)。 - 模块必须有明确功能边界与描述(写入 README)。 - 模块命名需简洁清晰,避免使用过于宽泛的名称(如 common、misc 等)。 --- ## 5. 依赖与版本管理规范(BOM) 项目采用统一 BOM 管理模式: - 所有版本号只允许出现在 `under-utils-bom` 模块中。 - 子模块禁止直接填写第三方依赖版本号。 - 如需升级依赖版本,必须通过 BOM 统一调整。 ### 5.1 BOM 基本结构示例 ```xml 4.0.0 com.undernineplaces under-utils-bom 1.0.0 pom org.springframework.boot spring-boot-dependencies 3.3.1 pom import com.baomidou mybatis-plus-boot-starter 3.5.6 org.redisson redisson 3.36.0 com.fasterxml.jackson.core jackson-databind 2.17.2 ``` ### 5.2 依赖管理要求 1. 所有子模块需通过 `` 引入 BOM。 2. 引入依赖时只写 groupId 和 artifactId,不填 version。 3. 禁止在子模块 POM 中重复声明版本。 4. 升级依赖时必须评估:兼容性、CVE 安全风险、受影响模块。 --- ## 6. 代码规范 ### 6.1 基础要求 - JDK 版本:统一使用 **JDK 17** 或更高版本(视实际情况调整)。 - 编码规范:统一使用 UTF-8。 - 缩进风格:4 空格缩进,禁止使用 Tab。 - 强制使用 `@Override` 注解。 ### 6.2 工具类通用规范 - 工具类必须使用 `final` 修饰,并提供私有构造方法: ```java public final class StringUtils { private StringUtils() { throw new UnsupportedOperationException("Utility class"); } public static boolean isEmpty(String s) { return s == null || s.trim().isEmpty(); } } ``` - 所有工具方法必须为 `static`,不得依赖 Spring 容器状态。 - 复杂方法必须拆分为多个小方法,避免超长方法。 - 禁止在工具类中直接写业务逻辑。 ### 6.3 异常处理规范 - 工具类内部禁止吞异常,必须明确处理或抛出运行时异常。 - 自定义运行时异常统一使用 `BizException` 或更具体的异常类型。 - 对外暴露的工具方法应提供带 `boolean` 返回的“安全方法”(如 `tryParseInt`)。 --- ## 7. 工具类开发规范 ### 7.1 单一职责原则 - 一个工具类只负责一个领域,例如: - `StringUtils`:字符串相关 - `LocalDateUtils`:日期时间相关 - `JsonUtils`:JSON 转换相关 - `CryptoUtils / AESUtils`:加解密相关 ### 7.2 方法命名规范 方法命名必须能够准确描述行为: | 方法名 | 说明 | |---------------|----------------------| | isEmpty | 判断是否为空 | | isNotEmpty | 判断是否非空 | | format | 格式化日期/时间 | | parse | 解析字符串为对象 | | encryptAES | 使用 AES 加密 | | decryptAES | 使用 AES 解密 | | generateId | 生成分布式 ID | ### 7.3 JavaDoc 要求 - 所有对外公开的工具方法必须编写 JavaDoc。 - 包含:方法用途、参数说明、返回值说明、异常说明。 示例: ```java /** * 判断字符串是否为空(null 或去除首尾空格后长度为 0)。 * * @param str 待判断字符串 * @return 当字符串为 null 或空白时返回 true,否则返回 false */ public static boolean isEmpty(String str) { return str == null || str.trim().isEmpty(); } ``` --- ## 8. 命名规范 ### 8.1 包命名 - 顶层包名统一为:`com.undernine.utils` - 按领域划分子包,例如: ```text com.undernine.utils.core.string com.undernine.utils.core.time com.undernine.utils.core.json com.undernine.utils.redis.lock com.undernine.utils.http.client ``` ### 8.2 类命名 - 工具类:`XxxUtils`(优先)或 `XxxUtil` - 配置类:`XxxConfig` / `XxxConfiguration` - 处理器类:`XxxHandler` - 异常类:`XxxException` 禁止出现含义不明确的命名,例如 `CommonUtils`、`BaseHelper`、`TmpUtils` 等。 --- ## 9. Git 协作流程 推荐采用改进版 Git Flow: - `master`:稳定可发布分支,仅合并正式 release。 - `develop`:开发主干分支,所有功能从此分支拉出。 - `feature/*`:功能开发分支。 - `release/*`:发布准备分支,用于测试与 bug 修复。 - `hotfix/*`:线上紧急修复分支。 基本流程: 1. 从 `develop` 拉取新功能分支:`feature/xxx` 2. 在功能分支开发与自测 3. 提交 PR 到 `develop`,并通过 Code Review 4. 发布前从 `develop` 创建 `release/x.y.z` 分支 5. 验证通过后合并到 `master` 并打 Tag --- ## 10. 分支命名规范 示例: - 功能分支:`feature/string-utils-enhance` - 新模块分支:`feature/add-redis-lock-module` - 修复分支:`hotfix/json-npe-fix` - 发布分支:`release/1.0.0` 要求: - 分支名称必须包含明确含义 - 禁止使用:`test`、`tmp`、`mybranch` 等随意命名 --- ## 11. Pull Request & Code Review 规范 每个 PR 必须至少包含以下内容: 1. 修改内容概述(What) 2. 修改原因或背景(Why) 3. 影响范围(Impact) 4. 测试说明(How tested) ### 11.1 审核要点 - 是否符合模块边界与工程结构规范 - 是否按要求完善 JavaDoc 与注释 - 是否具备充分的单元测试覆盖 - 是否引入了新的第三方依赖,如有需说明理由 - 是否存在潜在性能问题或线程安全问题 --- ## 12. 单元测试规范 - 所有公共工具方法必须具备对应单元测试。 - 使用 JUnit 5 + Mockito(如有需要)。 - 测试用例需覆盖: - 正常场景 - 边界场景(空值、极限值、异常输入) - 异常场景(无效参数等) 测试类命名规范: ```text StringUtilsTest LocalDateUtilsTest RedisLockTest JsonUtilsTest ``` --- ## 13. 文档规范 每个模块必须至少包含: - `README.md`:模块介绍、使用示例、注意事项。 - `CHANGELOG.md`(可选):记录该模块的变更历史。 根目录 `README.md`(即本文件)用于: - 介绍整个工具库工程 - 说明模块划分与依赖管理方式 - 描述协作与贡献流程 --- ## 14. 版本号管理与发布流程 版本号格式遵循: ```text MAJOR.MINOR.PATCH ``` 含义: - **MAJOR**:存在不兼容的 API 变更 - **MINOR**:新增功能,向下兼容 - **PATCH**:问题修复或微小改动 ### 14.1 发布流程(示例) 1. 确认 `develop` 状态稳定 2. 创建发布分支:`release/1.0.0` 3. 在发布分支上进行回归测试与 bug 修复 4. 合并到 `master` 与 `develop` 5. 在 `master` 打 Tag:`v1.0.0` 6. 使用 CI 进行打包与发布(如 Maven 私服、远程仓库等) --- ## 15. 质量保障要求 - 引入统一的代码检查工具(如 CheckStyle / Spotless 等)。 - CI 流程中必须包含: - 编译检查 - 单元测试 - 静态代码扫描(如 SonarQube,可选) - 禁止提交未使用代码、调试代码(如 System.out.println)。 - 所有公共 API 变更必须经过评审。 --- ## 16. 安全规范 - 禁止在代码中硬编码明文密码、密钥、访问令牌。 - HTTP 工具默认必须启用合理的超时配置。 - 禁止提供可执行任意文件读写、命令执行的工具方法。 - 对 JSON 反序列化等操作需评估安全风险,避免使用不安全的反序列化方式。 - 对外 API 返回或日志中不得泄露敏感信息(如密钥、密码、身份证号完整信息等)。 --- ## 17. 未来扩展规划(预留给后续完善) 本章节可在后续由其他协作者或 AI 助手(如 Claude 等)继续补充与完善,例如: - 增加 Observability(日志、链路追踪、指标)的统一工具模块 - 增加 Cache(本地缓存 + 分布式缓存)统一封装与规范 - 提供统一的异常码与错误字典支持 - 构建在线文档站点(如基于 Docusaurus / VuePress 等) - 增加其他语言版本工具库(Node.js / Python 等)的约定与互通方案 > 本文档为 Draft 版本,后续可在此基础上持续迭代、扩展和细化。