开源地址: https://gitee.com/jun-xtools/xtools.git
一、功能和用途
1.1 项目概述
xtools(低调大师工具箱)是一个基于 JDK 25 的 Java 工具库项目,为 Java 应用开发提供通用的工具方法和基础组件支持。
| 项目信息 |
说明 |
| 项目名称 |
xtools |
| 项目版本 |
5.0.0 |
| 父POM |
xtools-parent:5.0.0 |
| JDK版本 |
25 |
| 项目定位 |
通用Java工具库,提供加密、时间、系统、网络、文档等工具方法 |
| 维护团队 |
org.xujun |
1.2 技术特点
- 采用最新的 JDK 25 版本,充分利用新特性(Record类型、文本块、模式匹配等)
- 基于 JUnit Jupiter 6.0.3 构建单元测试体系
- 使用 Lombok 1.18.44 简化代码编写
- 集成 FastJSON2 2.0.60 实现高性能JSON处理
- 使用 BouncyCastle 1.84 提供国密算法(SM2/SM3/SM4)支持
- 集成 Google ZXing 3.5.4 实现二维码和条形码生成与解析
- 使用 Apache PDFBox 3.0.7 实现PDF文档处理
- 使用 Apache Fesod Sheet 2.0.1-incubating 处理Excel文件
- 集成 mmseg4j-core 1.10.0 实现中文分词
- 支持 AWS S3 SDK 2.42.34 实现对象存储
- 集成 ip2region 3.3.7 实现离线IP地址定位
- 使用 java-jwt 4.5.1 实现JWT令牌生成与验证
- 集成 OSHI 6.11.1 实现系统信息采集
- 使用 Apache Velocity 2.4.1 实现模板引擎功能
- 集成 Jsoup 1.22.1 实现HTML解析和爬虫功能
- 使用 MapStruct 1.6.3 实现对象映射
- 基于 Jakarta Servlet API 6.1.0 提供Web层支持
1.3 核心功能
1.4 功能层次结构
1.5 功能关系图
二、项目结构设计
2.1 整体架构
2.2 模块依赖关系
2.3 模块职责
| 模块 |
职责 |
依赖 |
| xtools-test |
测试基础设施,提供BaseTest基类 |
JUnit Jupiter 6.0.3 |
| xtools-base |
基础定义,异常体系、常量、错误模块枚举 |
xtools-test |
| xtools-core |
核心工具集,加密、时间、系统、图像、线程等 |
xtools-test, xtools-base |
| xtools-extend |
扩展工具集,国密、JSON、JWT、条码、文档等 |
xtools-test, xtools-core |
| xtools-web |
Web层工具,XSS过滤、Session管理 |
xtools-core |
| xtools-api |
第三方API集成,阿里云邮件、百度地图 |
xtools-test, xtools-core |
2.4 包结构设计
xtools
├── xtools-base(基础模块)
│ └── xtools.base
│ ├── exception
│ │ ├── BaseError
│ │ ├── BaseErrorModule
│ │ ├── CommonException
│ │ └── ExceptionUtils
│ ├── config
│ │ └── BaseParams
│ └── enums
│ ├── ErrorModule
│ ├── BaseErrorModule
│ └── TestError
│
├── xtools-core(核心工具模块)
│ └── xtools.core
│ ├── encrypt
│ │ ├── BaseEncryptUtils
│ │ ├── Base64Utils
│ │ ├── Md5Utils
│ │ └── Sha1Utils
│ ├── time
│ │ ├── DateUtils
│ │ ├── LocalDateTimeUtils
│ │ ├── InstantUtils
│ │ ├── TimestampUtils
│ │ └── CalendarUtils
│ ├── sys
│ │ ├── OsUtils
│ │ ├── BrowserUtils
│ │ ├── CmdUtils
│ │ └── SysBaseInfoUtils
│ ├── extend
│ │ ├── TemplateUtils
│ │ ├── PagingUtils
│ │ ├── UrlUtils
│ │ ├── DistanceUtils
│ │ ├── RandomUtils
│ │ ├── HtmlUtils
│ │ ├── ExecTimeUtils
│ │ ├── ClassScanner
│ │ ├── CheckUtils
│ │ └── ArithmeticUtils
│ ├── img
│ │ └── BufferedImageUtils
│ ├── thread
│ │ ├── ToolThreadFactory
│ │ └── TimeoutUtils
│ ├── log
│ │ └── LogUtils
│ ├── sensitive
│ │ └── SensitiveWordUtils
│ ├── dto
│ │ ├── FileInfo
│ │ ├── RsaDto
│ │ └── SysBaseInfoDto
│ ├── enums
│ │ ├── CoreError
│ │ ├── RegexEnum
│ │ ├── TimePattern
│ │ ├── LogLevel
│ │ └── OsEnum
│ ├── ArrUtils
│ ├── BytesUtils
│ ├── HexUtils
│ ├── CollectionUtils
│ ├── UuidUtils
│ └── DtoConversionUtils
│
├── xtools-extend(扩展工具模块)
│ └── xtools.extend
│ ├── encrypt
│ │ ├── Sm2Utils
│ │ ├── Sm3Utils
│ │ ├── Sm4Utils
│ │ └── PkcsUtils
│ ├── office
│ │ ├── PdfUtils
│ │ ├── WordUtils
│ │ ├── ExcelUtils
│ │ └── PptUtils
│ ├── dto
│ │ └── CryptoDto
│ ├── enums
│ │ └── ExtendError
│ ├── JsonUtils
│ ├── JwtUtils
│ ├── CodeUtils
│ ├── AnalyzerUtils
│ ├── UserAgentUtils
│ └── office
│
├── xtools-web(Web工具模块)
│ └── xtools.web
│ ├── xss
│ │ ├── XssFilter
│ │ ├── XssWrapper
│ │ └── XssUtils
│ ├── enums
│ │ ├── WebError
│ │ └── HeaderEnum
│ └── SessionUtils
│
├── xtools-api(API集成模块)
│ └── xtools.api
│ ├── ali
│ │ └── AliEmailUtils
│ ├── baidu
│ │ ├── LocationUtils
│ │ └── WeatherUtils
│ ├── dto
│ │ ├── IpAddrDto
│ │ ├── LocationDto
│ │ └── LatAndLngDto
│ ├── enums
│ │ └── ApiError
│ ├── utils
│ │ └── ReqLogUtils
│ └── config
│ └── TestApiConfig
│
└── xtools-test(测试模块)
└── xtools.test
└── BaseTest
三、项目功能设计
3.1 异常处理体系设计
3.1.1 异常体系架构
3.1.2 异常处理流程
3.1.3 错误码规范
| 模块 |
错误码范围 |
枚举类 |
示例 |
| xtools-core |
98001-99999 |
CoreError |
ENCRYPT(98201) |
| xtools-api |
95001-95011 |
ApiError |
ALI(95001), BAIDU(95011) |
| xtools-web |
Web模块范围 |
WebError |
- |
| xtools-extend |
Extend模块范围 |
ExtendError |
- |
3.2 加密工具设计
3.2.1 加密体系架构
3.2.2 加密工具功能
| 工具类 |
所属模块 |
功能描述 |
| BaseEncryptUtils |
xtools-core |
加密基础类,提供MessageDigest、密钥生成、Cipher创建等底层方法(protected) |
| Base64Utils |
xtools-core |
Base64编解码 |
| Md5Utils |
xtools-core |
MD5消息摘要 |
| Sha1Utils |
xtools-core |
SHA1消息摘要 |
| Sm2Utils |
xtools-extend |
SM2非对称加密/解密,基于BouncyCastle |
| Sm3Utils |
xtools-extend |
SM3哈希算法,国密摘要 |
| Sm4Utils |
xtools-extend |
SM4对称加密/解密,国密分组密码 |
| PkcsUtils |
xtools-extend |
PKCS#7填充方案 |
3.3 时间工具设计
3.4 系统工具设计
3.5 扩展工具设计
3.6 敏感词过滤设计
3.7 XSS防护设计
3.8 文档处理设计
3.9 API集成设计
3.10 测试体系设计
四、编码规范设计
4.1 命名规范
4.1.1 类命名
| 类型 |
命名规则 |
示例 |
| 工具类 |
XxxUtils |
DateUtils、Sm2Utils、JsonUtils |
| 数据传输对象 |
XxxDto |
FileInfo、RsaDto、LocationDto |
| 错误枚举 |
XxxError |
CoreError、ApiError、WebError |
| 通用枚举 |
XxxEnum |
RegexEnum、TimePattern、OsEnum |
| 异常类 |
XxxException |
CommonException |
| 接口 |
BaseXxx / Xxx |
BaseError、BaseParams、BaseErrorModule |
| 过滤器 |
XxxFilter |
XssFilter |
| 包装器 |
XxxWrapper |
XssWrapper |
| 配置类 |
XxxConfig |
TestApiConfig |
| 测试基类 |
BaseTest |
BaseTest |
4.1.2 方法命名
| 操作 |
命名规则 |
示例 |
| 获取值 |
getXxx / xxx |
getLocalIp()、pattern() |
| 判断 |
isXxx / hasXxx |
isEmpty()、isJson() |
| 转换 |
toXxx / fromXxx |
toStr()、from(long) |
| 生成 |
newXxx / getXxx |
newQrCode()、getKey() |
| 加密 |
encrypt / decrypt |
encrypt(publicKey, data) |
| 替换 |
replace / format |
replace(template, values) |
| 执行 |
run / execute |
run()、send(...) |
| 校验 |
check / isValid |
check(text)、isValid(input) |
4.1.3 常量命名
| 类型 |
命名规则 |
示例 |
| 基础常量 |
CP_ 前缀 |
CP_EMPTY、CP_LINE、CP_NUM0 |
| 算法常量 |
UPPER_SNAKE |
ALGORITHM_NAME |
| URL常量 |
UPPER_SNAKE |
ALIYUN_URL |
| 枚举字段 |
final 字段 |
pattern、regex、code |
4.2 注释规范
4.2.1 类注释格式
4.2.2 方法注释格式
4.3 代码风格
4.3.1 设计模式
| 设计模式 |
应用场景 |
示例 |
| 静态工具类 |
所有Utils类 |
DateUtils、Sm2Utils、JsonUtils |
| 静态工厂方法 |
异常创建 |
CommonException.create(CoreError.ENCRYPT, cause) |
| 模板方法 |
测试基类 |
BaseTest.runTest() 调用 doTest() |
| Fluent Builder |
命令行执行 |
CmdUtils.init(cmd).setRunDir(dir).run() |
| 工厂方法 |
线程创建 |
ToolThreadFactory 实现 ThreadFactory |
| 接口契约 |
错误体系 |
BaseError、BaseErrorModule 接口 |
4.3.2 异常处理规范
- 所有checked exception通过
CommonException.create()包装为unchecked exception
- 异常消息格式:
[module:type-code]formatted message
- 使用
{}作为消息模板占位符
4.3.3 序列化规范
- 大多数工具类实现
Serializable接口
- 使用
@Serial注解标注serialVersionUID
4.3.4 代码结构
- 4空格缩进
- 左大括号同行
- 方法间空行分隔
- 使用
implements声明接口实现
4.4 设计规范
4.4.1 分层原则
- xtools-test:零外部依赖,仅依赖JUnit
- xtools-base:基础定义层,不依赖任何业务逻辑
- xtools-core:核心工具层,依赖base
- xtools-extend:扩展工具层,依赖core
- xtools-web:Web专用工具,依赖core
- xtools-api:API集成层,依赖core
4.4.2 单一职责
- 每个Utils类只负责一个功能领域
- 加密工具按算法类型分离(Base64、MD5、SHA1、SM2、SM3、SM4)
- 时间工具按Java时间API类型分离
4.4.3 开闭原则
BaseEncryptUtils提供protected基础方法,子类可扩展
BaseError接口定义错误契约,各模块独立实现错误枚举
ClassScanner支持Predicate<Class<?>>灵活过滤
五、项目依赖设计
5.1 基础依赖
| 依赖 |
版本 |
用途 |
使用模块 |
| JUnit Jupiter |
6.0.3 |
单元测试框架 |
xtools-test |
| Lombok |
1.18.44 |
代码简化(注解处理) |
全模块 |
| FastJSON2 |
2.0.60 |
JSON序列化/反序列化 |
xtools-extend, xtools-web, xtools-api |
5.2 Apache Commons依赖
| 依赖 |
版本 |
用途 |
使用模块 |
| Commons IO |
2.21.0 |
IO操作工具 |
xtools-core |
| Commons Lang3 |
3.20.0 |
通用工具方法 |
xtools-web |
| Commons Text |
1.15.0 |
文本处理 |
xtools-web |
5.3 加密与安全依赖
| 依赖 |
版本 |
用途 |
使用模块 |
| BouncyCastle (bcprov-jdk18on) |
1.84 |
加密库,支持国密算法 |
xtools-extend |
| java-jwt |
4.5.1 |
JWT令牌生成与验证 |
xtools-extend |
5.4 系统与网络依赖
| 依赖 |
版本 |
用途 |
使用模块 |
| OSHI (oshi-core) |
6.11.1 |
系统信息采集 |
xtools-extend |
| ip2region |
3.3.7 |
离线IP地址定位 |
xtools-extend |
| UserAgentUtils |
1.21 |
浏览器User-Agent解析 |
xtools-extend |
| AWS S3 SDK |
2.42.34 |
对象存储客户端 |
xtools-extend |
5.5 文档处理依赖
| 依赖 |
版本 |
用途 |
使用模块 |
| Apache PDFBox |
3.0.7 |
PDF文档处理 |
xtools-extend |
| Apache Fesod Sheet |
2.0.1-incubating |
Excel文件处理 |
xtools-extend |
5.6 媒体与编码依赖
| 依赖 |
版本 |
用途 |
使用模块 |
| Google ZXing (javase) |
3.5.4 |
二维码/条形码生成与解析 |
xtools-extend |
| Thumbnailator |
0.4.21 |
图片压缩 |
xtools-extend |
| mmseg4j-core |
1.10.0 |
中文分词 |
xtools-extend |
| Pinyin4j |
2.5.1 |
汉字转拼音 |
xtools-extend |
5.7 工具库依赖
| 依赖 |
版本 |
用途 |
使用模块 |
| MapStruct |
1.6.3 |
对象映射 |
全模块 |
| Apache Velocity |
2.4.1 |
模板引擎 |
全模块 |
| Jsoup |
1.22.1 |
HTML解析和爬虫 |
xtools-api |
| Easy Captcha |
1.6.2 |
验证码生成 |
xtools-api |
| Caffeine |
3.2.3 |
本地高性能缓存 |
全模块 |
5.8 Web依赖
| 依赖 |
版本 |
用途 |
使用模块 |
| Jakarta Servlet API |
6.1.0 |
Servlet规范API |
xtools-web |
5.9 Maven构建插件
| 插件 |
版本 |
用途 |
| Maven Compiler Plugin |
3.15.0 |
Java源码编译 |
| Maven Source Plugin |
3.4.0 |
源码JAR打包 |
| JaCoCo Maven Plugin |
0.8.14 |
单元测试覆盖率报告 |
| 模块 |
版本 |
描述 |
| xtools |
5.0.0 |
父模块,聚合子模块 |
| xtools-parent |
5.0.0 |
父POM,统一依赖管理 |
| xtools-test |
5.0.0 |
测试基础设施模块 |
| xtools-base |
5.0.0 |
基础定义模块 |
| xtools-core |
5.0.0 |
核心工具模块 |
| xtools-extend |
5.0.0 |
扩展工具模块 |
| xtools-web |
5.0.0 |
Web工具模块 |
| xtools-api |
5.0.0 |
API集成模块 |
六、技术选型说明
6.1 JDK 25
- 选择原因:使用最新JDK版本,充分利用现代Java特性
- 主要特性:
- Record类型(用于
SensitiveWordUtils.Result等数据载体)
- 文本块(Text Blocks)简化多行字符串
- 模式匹配(Pattern Matching)增强类型判断
- 密封类(Sealed Classes)增强类型安全
- 虚拟线程(Virtual Threads)提升并发性能
- 改进的垃圾回收器(ZGC/Shenandoah)
6.2 JUnit Jupiter 6.0.3
- 选择原因:业界标准的Java单元测试框架
- 主要特性:
- 支持
@Test、@DisplayName等注解
- 支持参数化测试、嵌套测试
- 强大的断言和假设机制
- 与
BaseTest模板方法模式结合,统一测试输出格式
6.3 BouncyCastle 1.84
- 选择原因:Java平台最全面的加密库,支持国密算法
- 主要特性:
- 支持SM2(非对称加密)、SM3(哈希)、SM4(对称加密)等国密算法
- 提供PKCS填充方案
- 纯Java实现,无本地依赖
6.4 FastJSON2 2.0.60
- 选择原因:高性能JSON处理库
- 主要特性:
- 高性能序列化/反序列化
- 支持JSONPath查询
- 支持JSON模板替换(
{{key}}占位符)
- 支持Base64编码的JSON
6.5 Google ZXing 3.5.4
- 选择原因:业界标准的条码处理库
- 主要特性:
- 支持QR二维码生成与解析
- 支持多种条形码格式
- 支持logo嵌入二维码
6.6 Apache PDFBox 3.0.7
- 选择原因:纯Java的PDF处理库
- 主要特性:
- PDF转图片(144 DPI)
- 支持PDF文本提取
- 无外部依赖
6.7 其他重要依赖版本
| 依赖 |
版本 |
用途 |
选择原因 |
| Lombok |
1.18.44 |
代码简化 |
减少样板代码,提高开发效率 |
| MapStruct |
1.6.3 |
对象映射 |
编译期代码生成,高性能 |
| Apache Velocity |
2.4.1 |
模板引擎 |
灵活的文本模板替换 |
| Jsoup |
1.22.1 |
HTML解析 |
jQuery风格的DOM操作API |
| OSHI |
6.11.1 |
系统监控 |
跨平台系统信息采集 |
| ip2region |
3.3.7 |
IP定位 |
离线IP地址查询,无需网络请求 |
| Caffeine |
3.2.3 |
本地缓存 |
高性能本地缓存库 |
| Thumbnailator |
0.4.21 |
图片压缩 |
简洁的图片处理API |
| mmseg4j-core |
1.10.0 |
中文分词 |
MMSeg中文分词算法 |
| Pinyin4j |
2.5.1 |
拼音转换 |
汉字转拼音工具 |
| Easy Captcha |
1.6.2 |
验证码 |
多种验证码样式 |
| AWS S3 SDK |
2.42.34 |
对象存储 |
S3协议兼容存储 |
| java-jwt |
4.5.1 |
JWT令牌 |
JWT生成与验证 |
| UserAgentUtils |
1.21 |
UA解析 |
浏览器标识解析 |
| Jakarta Servlet API |
6.1.0 |
Servlet规范 |
Jakarta EE 10+标准 |
| Commons IO |
2.21.0 |
IO工具 |
文件流处理 |
| Commons Lang3 |
3.20.0 |
通用工具 |
字符串、数组、对象工具 |
| Commons Text |
1.15.0 |
文本处理 |
字符串转义、相似度计算 |
| Apache Fesod Sheet |
2.0.1-incubating |
Excel处理 |
Excel文件读写 |
文档版本:v1.0
编写日期:2026-04-16
项目版本:5.0.0
父POM版本:xtools-parent:5.0.0
JDK版本:25
维护团队:xujun.org