本项目所有值得记录的变更都会收录在本文件中。 格式遵循 Keep a Changelog, 版本号遵循 语义化版本。
对标 Guava 高频集合 API(Lists / Maps / Sets / Collections2 / Multimaps / Iterables)补齐:
ListUtil 新增 5 个方法:cartesianProduct(任意维度笛卡尔积,空维度→空结果)/ permutations(全排列 n!,含原列表)/ combinations(C(n,k),k 越界抛 IAE)/ concat 双版本(不可变视图,null 按空处理)CollUtil 新增 3 个方法:groupBy(Collection, K1, K2) 双键嵌套分组(保序 LinkedHashMap)/ groupBy(Collection, Function...) 多键链式分组(任意层嵌套,null 键映射防护)/ cartesianProduct(Collection 版)MapUtil 新增 4 个方法(对齐 Guava Maps):transformValues / transformEntries(键值联合变换)/ uniqueIndex(重复键抛 IAE,保序)/ asMap(集合→映射)SetUtil 新增 combinations(Set, int)(k 元素组合,C(n,k) 个,k 越界抛 IAE)对标 Hutool / Apache Commons 补齐 java.time 现代体验与编解码缺口:
DateUtil 新增 11 个方法:
toLocalDate / toLocalDateTime / toDate(LocalDate) / toDate(LocalDateTime)(系统时区,null-safe)parseLocalDate / parseLocalDateTime(自动探测 ISO / yyyy-MM-dd / HH:mm / HH:mm:ss / .SSS / 纯日期)/ parseLocalDateTime(String, String)(指定模式)isSameWeek(ISO 周定义,周一为一周首日)DateUtils):truncate / round / ceiling(Calendar 字段驱动,支持 SECOND / MINUTE / HOUR / DAY / WEEK / MONTH / YEAR,round 过半进位、ceiling 非零进位)Base32Util(对齐 commons-codec Base32,6 个方法):encode(byte[]) / encode(byte[], padding) / encode(String, Charset) / decode / decodeToString(容忍缺失 padding 与空白)/ isBase32;RFC 4648 已知向量全部通过Ascii85Util(对齐 commons-codec Ascii85,5 个方法):encode(byte[]) / encode(String, Charset) / decode / decodeToString / isAscii85;4 零字节 z 压缩、<~/~> 包裹容错对标 Hutool / Apache Commons 高频子集补齐 sure-core 四类缺口:
StrUtil 新增 15 个方法(对齐 commons-lang3 StringUtils):isAlpha / isAlphanumeric / isNumericSpace / isAsciiPrintable / containsWhitespace / removeWhitespace / indexOfAny / lastIndexOfAny(子串末字符索引语义) / replaceOnce(replacement 为 null 时不替换,返回原串) / removeSurrounding 双套 / removeSurroundingIgnoreCase 双套 / truncate(负 maxWidth 抛 IAE) / splitPreserveAllTokens(保留空 token) / stripStart / stripEnd(字符集合剥离,null=空白)IoUtil 新增 10 个方法(对齐 commons-io IOUtils):toBufferedInputStream / toBufferedReader(已缓冲不二次包装) / readFully(读不满抛 IOException) / skipFully(跳不足抛 IOException,skip 返回 0 时读 1 字节推进) / toString(Reader) / lineIterator(懒加载 LineIterator,Reader 与 InputStream 双版本,next 抛 NoSuchElementException) / contentEqualsIgnoreEOL(按行比较) / copy(Reader, OutputStream, Charset) / copy(InputStream, Writer, Charset)FileUtil 新增 8 个方法(对齐 commons-io FileUtils):checksumMD5 / checksumSHA1 / checksumCRC32 / isSymlink(File 与 String 双版本) / getCanonicalPath(解析失败回退绝对路径) / openInputStream / openOutputStream(IOException 包装为 UncheckedIOException) / deleteQuietly(静默删除)StreamUtil(对齐 Hutool StreamUtil,7 个方法全 null-safe):of(变参 / Collection / Iterable / Optional 四版本) / concat(null 流跳过) / nullToEmpty / emptyBeanCopier(对标 Guava/Commons 选项化拷贝缺口)+ CopyOption + CopyException:
copy / deepCopy / toBean / toMap + 链式 Copier(ignoreNull / ignoreReadonly / deep / include / exclude,include 与 exclude 互斥抛 IAE)CopyException(IGNORE_READONLY 跳过);类型转换失败带属性名;基本类型目标遇 null 保持原值(与 BeanUtil 一致);Bean↔Map 委托枚举 String 转换FileTailer + TailerOptions(对标 tail -f,虚拟线程):增量读 + LF/CRLF 行切分 + 跨行缓冲;编码自动探测 UTF-8/GBK(BOM 识别,可显式指定);readFromStart(N) 从文件头跳 N 行后跟踪、N≤0 从尾部;文件轮转自动重开并回调 onRotate;stopOnDelete 控制删除后停止或等待重建;单行回调异常不影响后续WatchDir + DirListener + EventType + WatchOptions + PathFilter(JDK WatchService 封装,虚拟线程):递归注册、新目录动态注册;路径过滤器(后缀/前缀/正则);事件类型可选(默认 CREATE+MODIFY+DELETE);OVERFLOW 单独上报;单次回调异常不影响后续SearchUtil(Guava/Hutool 均缺上下界):lowerBound / upperBound(自然序 + 比较器双套,重复元素/空集合/逆序确定性)、range([from, to) 不可变子列表)、binarySearch(与 Collections 语义一致 + null-safe)、interpolationSearch / exponentialSearch(long[] 有序数组,越界/空数组安全)TypeReference<T>(对标 Guava TypeToken):构造器捕获泛型实参,提供 getType / getRawClass;非参数化类型或实参数≠1 抛 IllegalArgumentExceptionTypeUtil:getClass(Type)(ParameterizedType / GenericArrayType / WildcardType / TypeVariable 四类规约)、getTypeArgument(Type, int)(越界兜底 Object)、getTypeArguments(不可变 List)、getType(TypeReference)、isUnknown(TypeVariable 仅上界为 Object 判定)ClassScanner(对标 Hutool ClassScanner):scanPackage / 谓词过滤 / 按注解 / 按父类扫描,支持目录与 jar(file: / jar: 协议)递归遍历,跳过 $ 嵌套类与加载失败类,null 安全CollStreamUtil(对标 Guava Streams + Hutool CollStreamUtil 高频):groupBy(保序)/ groupByKeyValue(同键覆盖)/ toMap(唯一键,重复键抛 IAE)/ summaryStatistics / filter / distinct(按键去重保首现)/ join(null 跳过)/ map(null 映射结果跳过),null 参数统一抛 IllegalArgumentExceptionSetUtil(对标 Guava Sets + Hutool SetUtil 高频):newHashSet / newLinkedHashSet / newTreeSet / of(不可变)/ union / intersection / subtract / symmetricDifference / filter / map / cartesianProduct / powerSet / isSubset / isSuperset / disjoint / containsAny / join / emptyIfNull / reverse / size(共 20 个,全部 null-safe + 保序 + 中文 JavaDoc)of 返回不可变 Set;cartesianProduct 返回不可变二元组列表;powerSet 含空集P9SetUtilBatch36Test 14 例,SetUtil 129 行 100% 覆盖,sure-core 实测 0.9874Lists + Commons CollectionUtils 高频):
get(越界安全 + 负数尾部定位)、subListSafe(越界钳制)distinct(去重保序)、map、filter、flatMap(内层 null 跳过)、zip(最短长度不可变配对)shuffle(可注入 Random 原地)、shuffleCopy、sample(不重复取样)union / intersection / subtract(均保序去重)min/max(自然序 + 比较器双套)、sum/average(null 元素跳过)chunk(均分块)、move(元素移动)toMap(唯一键 Guava uniqueIndex 语义,重复键抛 IAE)、toMap(带冲突合并策略)、difference(键差/值差)、mergeAll(合并带冲突策略,源目标同对象安全)Difference record:防御性拷贝 + 不可变视图(对齐 Partition 先例,SpotBugs EI_EXPOSE_REP 全绿)P8ListUtilBatch35Test 24 例 + P8MapUtilBatch35Test 5 例),sure-core 实测 0.9872,新增行全覆盖Partition record(防御性拷贝 + 不可变视图),CollUtil.partitionBy 按谓词二分CollUtil.groupBy2 两级嵌套分组(保序)addAllDistinct(去重合并)、removeAll(全移除差集)、retainAll(交集)CollUtil.flatten 两级扁平化、pairwise 相邻配对、takeWhile 前缀截取jacoco.line.min 0.70~0.93 → 0.98;10 个新增门禁模块(sure-aop/compress/db/event/math/pdf/process/script/template)默认 0.70 → 0.98;sure-socket → 0.97(例外,理由见下)。SocketUtil.getLocalHost 网卡枚举分支——L122 需「非 loopback 且 down」的网卡、L129 需 site-local 网段(10.x/172.16-31.x/192.168.x)、L136-137 需 getNetworkInterfaces() 抛 IOException;本 CI/沙箱环境三张网卡全部 up、无 site-local 网段、native 枚举无故障注入点,字节码级复核确认为环境物理不可达,其余 189 行全部覆盖。Security.removeProvider 算法不可用 + finally 还原)、网络(localhost 临时 HttpServer/未监听端口/短超时)、并发(虚拟线程/预中断线程/StructuredTaskScope 取消)、反射注入(关闭内部内容流/替换底层输出流/私有方法调用)。PRD 见 docs/prd/sure-coverage-98-{a,b,c}.md。AsyncUtil 异步门面(runAsync/supplyAsync/allOf/anyOf/withTimeout/await/joinAll,虚拟线程执行器 + 失败取消等价结构化语义)+ ThreadUtil.sleepInterruptibly(中断感知)。Result(ok/fail/map/flatMap/onSuccess/onFailure/recover/throwIfFailed)+ Option(Optional 超集:getOrElse/onEmpty/orElse)+ Results 组合子(allOf/anyOf/sequence),对标 Vavr/Guava。NullUtil 统一门面(isAnyNull/isAllNull/lastNonNull/coalesce/applyIfNotNull→Option/consumeIfNotNull/nullSafeToString 等 12 方法);5 新类 JavaDoc 示例块与 null 语义标注;CONTRIBUTING 新增「AI 可读 JavaDoc 规范」章节。exports com.sure.tool.config/com.sure.tool.graph 并新增全部 15 包 opens(module path 下 BeanUtil/反射可用);sure-extra/sure-benchmark/sure-examples/sure-spring-boot-starter 声明 Automatic-Module-Name(sure.extra/sure.benchmark/sure.example/sure.boot);新增 .github/scripts/check_moduleinfo.py JPMS 一致性审计;docs/modules.md 增加 JPMS 状态列。StripedLock 分段锁;ThreadUtil +6(命名线程池/定时池/sleep 重载/joinQuietly);StructuredTaskUtil +2(限时 varargs)。FileUtil +8(sizeFormat/size/copy/readLines/touch/walkFiles/lastModified/isNewer);IoUtil +4(流文件互通/writeLines/readLines);StrUtil +11(abbreviate/substringBetween/difference/getCommonPrefix/rotate 等)。EventBus 支持 DeadEvent;新增 DiGraph/GraphUtil(拓扑排序/环检测/DFS/BFS/最短路);MathUtil/BigDecimalUtil/StatUtil 数学子集。.github/scripts/check_docs_links.py 链接校验 + ci.yml docs-links job。WeakCache<K, V>:值用 WeakReference + ReferenceQueue 自动清理、可选 TTL、可选容量上限(capacity(0=无上限))、synchronized 线程安全、clean() 用 map.get(key)==entry 防覆盖误删CacheUtil:新增 newWeakCache() / newWeakCache(capacity, ttl)WeakCacheTest 6 用例(GC 回收 / TTL / 容量淘汰 / 覆盖防误删 / 虚拟线程并发)CronPattern 支持 6/7 段(第 7 段=年,1970–2199,year 可 null);getNextTimeAfter 与 match 增加年段判断(跨年跳转 1 月 1 日)CronUtil worker 换 Executors.newVirtualThreadPerTaskExecutor()(虚拟线程池)P7CronTest 6 用例(6 段兼容 / 7 段合法性 / 年匹配 / 跨年 / 年通配 / 虚拟线程执行)CpuInfo(进程/系统 CPU 使用率,含 Builder)、RuntimeInfo(堆/非堆内存、线程数 long)、DiskInfo(磁盘根卷容量)、ProcessInfo(PID/命令/启动时间/CPU 时长,含 Builder)SystemInfo 增强:getCpuInfo / getRuntimeInfo / getDisks / getProcesses(int) / getProcessCount / toProcessInfoSystemGapTest 5 用例JSONUtil.toList(String, Class<T>):JSON 数组字符串 → 类型安全元素列表P4JsonTypeTest 追加 testUtilToListConvenienceMultiMap<K, V>(多值映射:put/putAll/get/removeAll/remove 单值/containsKey/containsValue/keyCount/size/values/keys/entries/asMap;LinkedHashMap 保序、缺失键返回空只读列表)Multiset<T>(计数集合:add(+n)/remove(实际移除数)/setCount/count/elementSet/entrySet/iterator 按计数展开/size 含重复/uniqueSize)RangeSet<T>(区间集合:左闭右开 [lower, upper),add 自动合并重叠与首尾相接、remove 拆分子区间、contains/ranges/span)CollUtil 新增:newTreeSet(Comparator, T...) / newConcurrentHashSet(T...) / flatMap / swap / toArray(Iterable, Class) / maxCount(众数) / containsAny(Collection, Collection)MultiMapTest 11 例、MultisetTest 10 例、RangeSetTest 10 例、CollUtilBatch20Test 7 例config.Props(对标 Hutool Props):java.util.Properties 增强——classpath/文件加载(UTF-8)、getStr/getInt/getLong/getDouble/getBool/getBigDecimal/getObj(类型安全 + 默认值回退)、toBean(Class)(属性名直匹配 + 类型转换)、toMap() 快照util.ExpressionUtil(零运行期依赖):LL(1) 递归下降算术表达式求值——+ - * / %、括号、一元负号、整数/小数/科学计数法、变量替换、BigDecimal 高精度;eval(String)、eval(String, Map)、evalNumber、checkverify 阶段对比上一发布版本 v1.8.0,破坏性 API 变更即失败Batch14CoreTest(Props 5 例 + ExpressionUtil 7 例,共 12 用例)ReflectUtil:新增 getClassByName(基础/包装类型映射)、getMethodByName(继承链+接口默认方法)、getTypeArguments(泛型父类类型参数解析)、getFieldMap(含继承字段表)、hasField(含 ignoreCase 重载)、invoke 显式参数类型重载、setAccessibleConvertUtil:新增 toMap(Object...)(键值对数组转 Map,奇数抛异常)与 toMap(Collection, keyFieldName)(Bean 集合按字段转 Map)RandomUtil:新增 randomLetter(int)、randomChinese(int)(CJK 基本区)、randomString(int, char[])(指定字符集)CollUtil:新增 rotate(正右旋/负左旋)、removeEmpty、removeAny、isAllEmpty、isAllNotNull(removeNull 原已有)BeanUtil:新增 copyToList(含 ignoreNullValue 重载)、toBean(Object, Class, boolean)、mapToBean(Map, Class, boolean ignoreError);getProperty 支持多级路径(a.b.c)与 Map 取值;setPropValue 对基本类型属性的 null 值安全跳过HttpRequest:新增 form(String, File...)(同一字段多个文件)与 formFiles(Map<String, File>)(多字段文件);fileParams 升级为多文件模型,buildMultipart 按字段写出全部文件HttpUtil:新增 upload(url, form, fileField, File[]) 与 upload(url, form, Map<String, File>) 多文件重载(含超时版本),统一走私有 uploadMultiP6HttpMultipartTest(本地 HttpServer 实测 multipart 解析):同字段多文件 / 多字段文件 / 文件数组 / 文件 Map / 单文件兼容,共 5 用例KdfUtil:HKDF-SHA256/384/512 密钥派生(extract-then-expand / expand-only)MlKemUtil:ML-KEM-512/768/1024 后量子密钥对生成与 X.509/PKCS8 编解码EcdhUtil:X25519 / EC 共享密钥协商QrCodeUtil:新增 QrConfig 配置类(尺寸 / 纠错等级 / 边距 / 前景背景色 / Logo),generate / generateImage / generateBase64 / generateFile 支持自定义配置ImgUtil:新增 write(PNG/JPG 等格式写出)、rotate(任意角度旋转)、gray(灰度化)、round(圆角裁剪)MailAccount:新增 charset(默认 UTF-8)与 timeout(默认 10000ms)配置;MailUtil 新增全参数 send(TO/CC/BCC + HTML + 附件)FtpUtil:新增编码 / 连接读写超时 connect 重载、rename、existmaven.compiler.release=25,CI 矩阵统一 JDK 25(三平台),文档与教程基线表述同步更新format(Date)/format(Date, String) 由线程本地 SimpleDateFormat 改为线程安全 DateTimeFormatter 静态缓存,format 耗时约 613ns→125ns(Hutool 对照 272ns),JMH 门禁 ratio 2.23→0.46sure-process 模块——零依赖进程门面 ProcessUtil(String/List/ProcessBuilder 多重载、execWithTimeout 超时 destroyForcibly、stdout/stderr 虚拟线程并发读防管道死锁)+ ProcessResult(exitCode/stdout/stderr/timedOut);新增 sure-math 模块——零依赖数学与数值工具 MathUtil(isPrime/nextPrime/埃氏筛 primes/gcd/lcm/factorial/fibonacci/comb/perm/进制转换/isPowerOfTwo/nextPowerOfTwo)+ BigDecimalUtil(默认 10 位 HALF_UP 四则、round/roundHalfUp/忽略尾零 equals)+ NumberUtil(parse 容错回退/min/max)+ RandomUtil(ThreadLocalRandom 主 + SecureRandom 变体/randomString/randomNumbers/randomBytes/randomElement/shuffle);新增 sure-compress 模块——SevenZUtil(目录递归 7z/LZMA2 压缩与解压、解压路径穿越校验、魔数检测,基于 commons-compress 1.27.1)+ BrotliUtil(官方 org.brotli:dec 纯 Java 解码、魔数检测,编码侧因官方无 Java 编码器/原生依赖冲突而裁减)sure-socket 模块——零依赖 TCP 门面 SocketUtil(带超时 connect / isReachable 探测 / isPortAvailable / getLocalHost 本机 IPv4 / isInnerIP 内网判断 / safeClose / readLine / writeString)+ SocketServer(port=0 自动分配、每连接一个虚拟线程执行 SocketHandler、stop 幂等)+ SocketClient(send/sendString/receive/receiveLine/receiveAll、幂等 close,SocketRuntimeException);新增 sure-event 模块——零依赖轻量事件总线 EventBus(函数式 subscribe/Subscription 取消、@EventSubscribe 注解 register/unregister、父类事件兼容匹配、postAsync 虚拟线程异步投递、EventExceptionHandler 可插拔异常处理、并发安全)sure-script 模块——零依赖 JSR-223 脚本门面 ScriptUtil(引擎探测 / 编译缓存 / 快速求值,缺失引擎抛带依赖指引异常,ScriptRuntimeException);新增 sure-template 模块——零依赖模板引擎 Template/TemplateUtil/SimpleTemplate(${} 占位符 / \${} 转义 / Map 与 Bean 渲染 / 点号路径 / null 值空串 / 未知变量保留原样)sure-aop 模块——零依赖 AOP 门面 Aspect 切面 + ProxyUtil 代理工厂(JDK 动态代理,方法级匹配,before/after/afterException 三通知点,非接口目标抛带 CGLIB 指引异常);新增 sure-pdf 模块——基于 Apache PDFBox 3.0.4 的 PDF 轻量门面 PdfWriter(标题/文本/表格/图片/自动分页/自定义 TTF 字体)+ PdfUtil(文本提取/页数/合并/魔数校验,PdfRuntimeException)sure-log 模块——零依赖日志门面 LogUtil/LogFactory/Log(classpath 探测 SLF4J 自动委托,未命中回退 Console 输出,占位符/异常堆栈/级别开关齐全);sure-core 新增 SettingUtil 分层配置读取(系统属性 > 环境变量 > 文件 > 默认值,UTF-8 key=value 解析,类型化取值,Copy-on-Write 线程安全)sure-db 模块——零依赖 JDBC 数据访问层 Db/DbUtil/SqlRunner/Entity/SimpleDataSource/PageResult(PreparedStatement 参数绑定防注入、IDENTITY 主键回读、事务回调自动提交/回滚、LIMIT/OFFSET 分页、内置最小连接池)StructuredTaskUtil——parallel 并行聚合(含超时)、anyOf 首成功短路(含超时)、失败传播与中断语义;ThreadUtil 新增 invokeAll(tasks, timeout) 限时重载(超时自动取消未完成任务)SeqUtil(JDK 21 Sequenced 集合)——倒序快照、首尾安全访问、不可变前置/追加、有序 Map 首尾键值;CollUtil 增补 chunk 分片、randomItem/randomItems 随机取样、toImmutable 不可变副本、frequency 频次统计< 未转义(ImgUtil @param <= → <=)导致的 javadoc 构建失败_site 权限 + apidocs 动态定位;CodeQL 切换 advanced(停用 default setup)docs/benchmark-report.md —— JMH 31 项基准(suretool vs Hutool vs Guava):字符串/集合 join 快 4.3–4.5×、JSON 解析快 2.3×、JSON 序列化快 4.9×、日期解析快 4.4×、trim 快 46%;Guava 对照 3 项(join/集合构造/contains);sure-benchmark 新增 guava 依赖与 3 个对照基准点.github/workflows/release.yml —— 推送 v* 标签即触发:全量门禁 → release profile 构建(源码/JavaDoc/SBOM)→ GPG 签名 bundle → Sonatype Central Portal API 上传发布 → 轮询 repo1 校验 → 自动创建 GitHub Release;支持手动触发;发布指南见 docs/RELEASING.mdMailUtil(jakarta.mail,文本/HTML/附件、SSL/TLS/STARTTLS)+ MailAccount 配置FtpUtil(Apache Commons Net,连接/上传下载/列表/目录操作/被动模式/二进制)QrCodeUtil(ZXing,PNG/Base64/图片生成与内容解析)ImgUtil(JDK AWT 零依赖,文字/图片水印、横纵拼接、等比缩略)startVirtualThread(Runnable) / newVirtualThread(Runnable, String):虚拟线程启动与创建virtualExecutor() / virtualExecutor(prefix) / virtualThreadFactory(prefix):每任务一虚拟线程的执行器与命名工厂isVirtual(Thread) / isVirtual():虚拟线程判定parallel(Runnable...):虚拟线程并发执行并等待全部完成,任务异常原样透传invokeAll(List<Callable<T>>):并发执行有返回值任务,按入参顺序返回结果JsonPath 求值器(JSONUtil.query(json, path) / getByPath),支持对象属性、数组索引、通配 [*]、递归下降 ..、过滤器 [?(@.price < 10)](比较/逻辑/存在性)StreamJsonParser 与 JsonHandler 事件接口(JSONUtil.parseStream),逐 token 回调消费,不整载内存,适合大文件;支持转义、Unicode、数字、嵌套与深度上限(256)StrUtil:新增 subBefore / subAfter / trimStart / trimEnd / surroundMapUtil:新增 values / getBigInteger / getEnum / getLocalDate / getLocalDateTimeConvertUtil:新增 toSqlDate / toTimestampcoverage/badge.json,由 pages workflow 生成)HttpRequest.cookie(name, value) / cookie(String) 发送 Cookie 头;HttpResponse.cookies() / getCookie(name) 解析 Set-CookieHttpRequest.proxy(host, port) / proxy(Proxy);HttpUtil.get/post/postJson/upload 增加 Proxy 重载form(name, File) 自动升级 multipart/form-data 编码(边界随机、文本字段 + 文件字段、按扩展名推断 Content-Type)HttpClientBuilder(JDK HttpClient 构建器,虚拟线程 executor / 连接超时 / HTTP 代理 / HTTP2 可选);HttpRequest.client(HttpClient) / pool(builder) 切换 JDK HttpClient 引擎(keep-alive 连接复用)P1 置换为 rotl(15)/rotl(23)(此前误用 9/17),对齐 GB/T 32905;
修复后全部标准向量通过,并新增 512 组长消息向量回归CK 常量生成公式为逐字节 (28i + 7j) mod 256(此前等差公式自第 9 项起偏差);
修正密钥扩展 T′ 遗漏 S 盒 τ 变换;修正轮函数寄存器移位语义;
修复后通过 GB/T 32907 标准向量(ECB 单块 681edf34…),并新增 gmssl 独立生成的 ECB/CBC 互操作向量测试0.2.x 升级为 1.0.0,标记 API 进入稳定承诺期(保持向后兼容的发布策略)。CollUtil:新增分页 page、就地洗牌 shuffle、频次统计 countMap、单向差集 subtract、
列表转映射 toMap、批量追加 addAll、Iterable 判空重载;com.sure.tool.id.NanoIdUtil:URL 安全短 ID(默认 21 字符,可定制字母表与随机源);com.sure.tool.id.UlidUtil:26 字符 Crockford Base32 ULID,支持单调递增模式;com.sure.tool.system.SystemInfo:CPU 核数/负载、JVM 堆与系统内存、JVM 启动与运行时长、
PID/命令行、OS 家族判断(Windows/Linux/macOS/Unix);ReUtil:新增正则转义 escape / 反转义 unescape、按分组提取 findAll(regex, content, groupIndex);BeanUtil:新增深拷贝 deepCopy(递归复制 Bean/Map/List/Set/数组,无第三方依赖);P4FeaturesTest 覆盖全部新增 API;sure-core 指令覆盖率 87.9%,全模块 SpotBugs 0 告警;GzipUtil:GZIP 压缩/解压(字符串/字节/文件,零依赖);SerializeUtil:JDK 序列化与文件读写、序列化深拷贝;RateLimiter:令牌桶限流器(平滑补充、突发容量、阻塞/非阻塞获取);RetryUtil:固定间隔重试与条件重试(结果条件、异常重试开关);ExceptionUtil:堆栈转字符串、根源异常、cause 链判定、异常包装;EnumUtil:按名称/序号/toString 转换枚举,支持忽略大小写;P4Features2Test(9 例);sure-core 指令覆盖率提升至 88.2%;BloomFilterUtil:布隆过滤器(可配置预期元素数与误判率,双独立哈希,零依赖);UrlUtil:URL 编码/解码、URI 解析(host/port/scheme/path)、查询参数提取与拼接;ImageUtil:基于 ImageIO 的图像读写、缩放、裁剪、灰度、旋转、格式转换;WeightRandom:权重随机(任意对象 + 权重项);BoundedPriorityQueue:有界优先队列(容量固定,自动淘汰最次元素);Pair / Triple:不可变有序二元组/三元组(JDK record);P4Features3Test(6 例);sure-core 指令覆盖率提升至 88.3%;MoneyUtil:人民币金额转中文大写(负数/角分/万亿级,财务报销场景);CompareUtil:基础类型与空安全比较、取最值、范围约束;DateUtil:新增星座 getZodiac、农历生肖 getChineseZodiac;NetUtil:新增 IPv4 与 long 互转 ipv4ToLong/longToIpv4、合法性校验 isIpv4;ObjectUtil:新增 isAllNotNull/isAllNull/空安全 compare;HashUtil:新增 MurmurHash3-32 murmur3_32、fnv1a64、djb2 通用哈希;RandomUtil:新增 randomEle(随机取一个)、randomEleSet(随机取 N 个不重复);P4Features4Test(7 例);sure-core 指令覆盖率提升至 88.8%;StrSimilarity(text 包):Levenshtein 编辑距离、相似度、Jaccard、余弦相似度;HtmlUtil(util 包):HTML 转义/反转义、去标签、按标签名移除;BytesUtil(util 包):long/int/short 与字节大端互转、拼接/切片/反转/十六进制;BitUtil(util 包):单位置位/清除/翻转/读取、int/long 位范围提取;NumberUtil:新增 toStr(避免科学计数法)、range(整数序列)、factorial;StrUtil:新增 hide(掩码)、subBetween(取标记间)、isNumeric、removeAll;P4Features5Test(6 例);sure-core 指令覆盖率提升至 89.3%;Singleton(util 包):类级单例池,线程安全,支持默认/参数构造器;Props(util 包):Properties 增强,UTF-8 加载防中文乱码、强类型读取、默认值;DateUtil:新增 beginOfWeek/endOfWeek(周一为一周起点)、formatChineseDateTime、dayOfMonth、hour;CsvUtil:新增指定字符集读写 read(File, Charset)/write(File, rows, Charset);IdUtil:新增 createSnowflake() 默认节点快捷创建;MapUtil:新增按值排序 sortByValue;P4Features6Test(5 例);sure-core 指令覆盖率 88.8%(门禁 70% 以上);TimeInterval(util 包):方法耗时统计计时器,毫秒/秒/纳秒/可读文本;CharUtil:新增 isFileSeparator/toUpper/toLower;HexUtil(util 包):字节与十六进制互转、字符串与 hex 互转(UTF-8);DateUtil:新增 season(季度)、formatChineseDate、dayOfYear、minute、second;CollUtil:新增 containsAll(元素数组/集合两种重载);MapUtil:新增 getBigDecimal(含默认值);P4Features7Test(5 例);sure-core 指令覆盖率 88.9%;CreditCodeUtil(util 包):统一社会信用代码校验(GB 32100-2015)+ 掩码;BankCardUtil(util 包):Luhn 算法校验 + 卡号掩码;DateUtil:新增 formatBetween(可读时长)、isWeekend、offsetWeek;StrUtil:新增 indexOf/lastIndexOf;CollUtil:新增按 Bean 属性排序 sortByProperty;MapUtil:新增 toProperties;P4Features8Test(5 例);sure-core 指令覆盖率 89.1%;NumberUtil:新增 gcd(最大公约数)、lcm(最小公倍数)、isPrime(素数);DateUtil:新增 beginOfYear/endOfYear、offsetMonth;ConvertUtil:新增 toBigDecimal、toDate(多格式/时间戳解析);StrUtil:新增 startWithAny/endWithAny;CollUtil:新增 split(分块)、sum/sumLong/sumDouble;ArrayUtil:新增 lastIndexOf、swap;P4Features9Test(5 例);sure-core 指令覆盖率 89.2%;RadixUtil(util 包):2~36 进制任意互转(toString/toLong/convert);EmojiUtil(util 包):emoji 与 \uXXXX 转义互转(支持代理对);DateUtil:新增 getGanzhi(天干地支)、offsetSecond/offsetYear、isIn(区间判断);ArrayUtil:新增 remove/append/insert;MapUtil:新增 sort(按键排序)、filter、getDate;CollUtil:新增 min/max(Comparable 集合);P4Features10Test(5 例);sure-core 指令覆盖率 89.5%;ObjectUtil:新增 isBasicType、getClassName(数组含维数);DateUtil:新增 isToday/isYesterday(isSameDay 已存在);StrUtil:新增 splitToIntArray/splitToLongArray;NumberUtil:新增 partValue(按权重分配)、isLong;ConvertUtil:新增 toShort/toByte/toFloat(含默认值重载)、toCharArray;CollUtil:新增 listToMap(键提取函数转 Map);P4Features11Test(6 例);sure-core 指令覆盖率 89.5%;JSONUtil(sure-json):新增 toJsonPrettyStr(缩进美化,支持 Map/集合/数组/日期/转义);XmlUtil(sure-xml):新增 readXml(文件读取)、format(缩进格式化);DfaUtil(sure-dfa):新增 replace(敏感词替换,含端点修正);StrUtil(sure-core):新增 subBetweenAll(提取所有区间内容);P4JsonPrettyTest/P4XmlTest/P4DfaTest;全模块 527 测试全绿;JSONObject/JSONArray:新增 getChar/getShort/getByte/getFloat(含默认值,数组越界安全);CronUtil:新增 nextTimeAfter(静态便捷入口);AbstractCaptcha:新增 getCodeBase64(Data URI,可直接用于 img);MapUtil(sure-core):新增 getFloat/getChar/getByte/getShort;StrUtil(sure-core):新增 splitToDoubleArray;P4JsonTypeTest/P4CronTest/P4CaptchaTest;全模块 532 测试全绿;HttpUtil:新增 putJson/deleteJson/delete/put(含超时重载);URLUtil:新增 encode/decode(UTF-8 编解码);RsaUtil:新增 sign/verify(SHA256withRSA 签名验签);SecureUtil:新增 rsaSign/rsaVerify;JSONObject:新增 setAll(链式批量设置);IdUtil(sure-core):新增 getSnowflakeNextId(默认节点单例,线程安全);P4HttpTest/P4UrlTest/P4RsaTest/P4JsonSetAllTest;全模块 537 测试全绿;JwtUtil:新增 getClaim/getExpireTime/isExpired/getExpireSecondsLeft;JWT:新增 verifySignature(仅验签不查过期);HmacUtil:新增 hmacSha384Hex/hmacSha384Base64/hmacSha512Base64;AbstractCaptcha:新增 write(File);StrUtil(sure-core):新增 removePrefix/removeSuffix/subSuf/subPre;ValidatorUtil(sure-core):新增 isCreditCode/isDate(含闰年校验);P4JwtTest/P4HmacTest/P4CaptchaWriteTest;全模块 543 测试全绿;DesensitizedUtil(sure-core):新增 carLicense(车牌脱敏);ImageUtil(sure-core):新增 toBase64/toDataUri(图片 Base64 编码);RandomUtil(sure-core):新增 randomEleWeighted(权重随机);DateUtil(sure-core):新增 beginOfQuarter/endOfQuarter(季度边界);ConvertUtil(sure-core):新增 toEnum(字符串转枚举,null 安全);CronUtil:新增 match(时刻匹配便捷入口);StrUtil(sure-core):新增 splitTrim/blankToDefault;EscapeUtil(sure-core):新增 escapeXml/unescapeXml;DateUtil(sure-core):新增 age(Date, Date)(指定参考日期的周岁);NumberUtil(sure-core):新增 isNumber(BigDecimal 严格数字判断);JSONObject/JSONArray(sure-json):新增 getDate(时间戳/日期字符串转 Date);P4Features12Test;ConvertUtil(sure-core):新增 toDoubleArray/toBooleanArray(支持逗号分隔字符串);ValidatorUtil(sure-core):新增 isIpv6/isMac;StrUtil(sure-core):新增 isUpperCase/isLowerCase;DateUtil(sure-core):新增 isSameMonth;ObjectUtil(sure-core):新增 toString(null 安全);JSONObject/JSONArray(sure-json):新增 getBigDecimal(金额场景);MapUtil(sure-core):新增 builder 链式构建器(MapBuilder,LinkedHashMap 保序);StrUtil(sure-core):新增 fillBefore/fillAfter(前后补位);ArrayUtil(sure-core):新增 wrap(基本类型数组转包装数组,int/long/double);DateUtil(sure-core):新增 toDate(Calendar)/beginOfHour/endOfHour;NumberUtil(sure-core):新增 percent(百分比字符串);JSONArray(sure-json):新增 toArray/toList(元素转 Bean);ArrayUtil(sure-core):wrap 补齐 float/short/byte/char/boolean;DateUtil(sure-core):新增 daysBetween/getWeekOfMonth;MapUtil(sure-core):新增 inverse(键值互换);StrUtil(sure-core):新增 toUnicode;JSONUtil(sure-json):新增 isJsonObj/isJsonArray;TreeUtil(sure-core):新增 findNode(按 ID 深度查找);StrUtil(sure-core):新增 maxLength(截断加省略号);ArrayUtil(sure-core):新增 isSorted(升序/降序);CsvUtil(sure-core):新增 read(InputStream, Charset)/write(Writer, rows);RsaUtil(sure-crypto):新增 signHex/verifyHex/signBytes/verifyBytes;DesUtil(sure-crypto):新增 generateKey(8 字节 DES 密钥);JSONObject(sure-json):新增 deepClone(递归深拷贝);StrUtil(sure-core):新增 strip(去首尾指定字符/空白);HttpUtil(sure-http):新增 patchJson(基于 JDK HttpClient,HttpURLConnection 不支持 PATCH);CollUtil(sure-core):新增 minBy/maxBy(按提取函数取极值);ValidatorUtil(sure-core):新增 isLowerCase/isUpperCase;BooleanUtil(sure-core):新增 toStringCn(是/否);JSONArray(sure-json):新增 deepClone(递归深拷贝);ZipUtil(sure-core):新增 zip(List<File>, File[, Charset]) 多文件/目录打包;RandomUtil(sure-core):新增 randomDay(LocalDate/Date 双版本随机日期);StrUtil(sure-core):新增 center(居中对齐填充);DateUtil(sure-core):新增 isSameYear;CollUtil(sure-core):新增 zip(两集合配对为 Map);HttpUtil(sure-http):新增 head(HEAD 请求返回响应头);NumberUtil(sure-core):新增 toFixed(BigDecimal 保留小数位,四舍五入);StrUtil(sure-core):新增 firstNonBlank(首个非空白)/concat(数组拼接);DateUtil(sure-core):新增 getMonthName(月份中文名);ArrayUtil(sure-core):新增 nullToEmpty(null 转指定类型空数组);HttpUtil(sure-http):新增 upload(multipart/form-data 文件上传);StrUtil(sure-core):新增 swapCase(大小写互换);NumberUtil(sure-core):新增 parseNumber(字符串解析为 Number);DateUtil(sure-core):新增 offsetQuarter/getYear/getMonth/getDayOfMonth/getHour;ValidatorUtil(sure-core):新增 isTime(HH:mm:ss 校验);Cache(sure-cache):新增 getOrPut(default 方法,无值则计算写入);StrUtil(sure-core):新增 isAllNotBlank/isAllEmpty;DateUtil(sure-core):新增 getWeekOfYear(ISO 8601:周一为起点、最少 4 天);MapUtil(sure-core):新增 merge(两 Map 合并,后者覆盖);ValidatorUtil(sure-core):新增 isDecimal;NumberUtil(sure-core):新增 floor/ceil;DfaUtil(sure-dfa):新增 replace(String, String)(敏感词替换为字符串);HttpUtil(sure-http):新增 downloadBytes(URL 下载为字节数组,双超时重载);ObjectUtil(sure-core):新增 length(数组/CharSequence/Collection/Map 长度);DateUtil(sure-core):新增 format(LocalDate)/format(LocalDateTime);ConvertUtil(sure-core):新增 toBigInteger;StrUtil(sure-core):新增 replace(区间) 重载;CollUtil(sure-core):新增 removeNull;ValidatorUtil(sure-core):新增 isBirthday(含闰年 2 月校验);NumberUtil(sure-core):新增 pow(快速幂);XmlUtil(sure-xml):新增 getByXPath(XPath 表达式取值,JDK 内置实现);StrUtil(sure-core):新增 containsAnyIgnoreCase;DateUtil(sure-core):新增 beginOfMinute/endOfMinute;ArrayUtil(sure-core):新增 resize(扩容/缩容);TimedCache(sure-cache):新增 getRemainingTime(剩余存活时间);ConvertUtil(sure-core):新增 toLocalDate/toLocalDateTime;ValidatorUtil(sure-core):新增 isGeneralWithChinese;ExcelUtil(sure-poi):新增 read(file, sheetIndex, startRow)、writeBeans(beans, headers)(表头即字段选择器);WordUtil(sure-poi):新增 write(file, text, append)(追加模式);PoiUtil(sure-poi):新增 setCellValue(String/Number/Boolean/Date 自动映射);StrUtil(sure-core):新增 replaceIgnoreCase;DateUtil(sure-core):新增 getAge(周岁);ArrayUtil(sure-core):新增 get/get(index, defaultValue);SecureUtil(sure-crypto):新增 sha384;JSONArray(sure-json):新增 join(delimiter);JSONObject(sure-json):新增 getBool(key, defaultValue);DateUtil(sure-core):新增 beginOfSecond/endOfSecond;LruCache(sure-cache):新增 getCapacity;IdcardUtil(sure-core):新增 getAge(周岁,补全既有 15/18 位工具);CollUtil(sure-core):新增 sortByProperty(两参便捷版)、sortByPropertyDesc、indexOf、lastIndexOf;MapUtil(sure-core):新增 sortByValueDesc;BeanUtil(sure-core):新增 fill(Map 填充,null 不覆盖);HttpUtil(sure-http):新增 getJson;sure-all 聚合、sure-bom 统一版本管理;
sure-core / sure-json / sure-http / sure-crypto / sure-cron / sure-cache / sure-xml /
sure-poi / sure-captcha / sure-jwt / sure-dfa / sure-benchmark / sure-examples /
sure-spring-boot-starter / sure-bom / sure-all。com.sure.tool。sure-captcha:验证码生成与校验;sure-jwt:JWT 签发与解析(HS/RS);sure-http:HTTP 客户端封装(连接超时与 TLS 配置);sure-dfa:敏感词过滤(DFA 算法)。AesUtil 采用 AES/GCM/NoPadding 认证加密(随机 IV + SHA-256 密钥派生);
RsaUtil 采用 RSA/OAEP-SHA256,最小密钥长度 2048 位;DesUtil 标记 @Deprecated 仅供存量数据解密。maven.compiler.release=21,移除低版本兼容 profile。codeql.yml(push / PR / 每周定时,security-and-quality 查询集),历史告警清零。-Prelease profile(CycloneDX SBOM / GPG 签名 / sources / javadoc / OSSRH staging)+
distributionManagement;docs/RELEASING.md 发布指南;scripts/release.ps1 发布辅助脚本。sure-examples 模块 14 个 Demo + ExamplesRunner 聚合入口(实测可运行)。sure-spring-boot-starter 自动装配骨架(suretool.* 配置前缀)。docs/index.md 类索引 + GitHub Pages 发布工作流(pages.yml);
Hutool 对比文档、维护手册、技术文章与 awesome-java 提交材料。CODE_OF_CONDUCT.md(Contributor Covenant 2.1)、中英文双语主页(README.en.md)、
issue / PR 模板、SECURITY.md 漏洞应急响应 SOP。StrUtil:新增 isWrap(判断是否被前后缀包裹)、wrap(包裹)、unWrap(去除包裹,仅实际匹配时去除);FileUtil:新增 copyDir(递归复制目录)、clean(清空目录内容,保留目录本身)、
getMimeType(扩展名 → 常用 MIME,覆盖文本/图像/音视频/办公/压缩/字体等 60+ 类型,未知返回 octet-stream);DateUtil:新增 betweenMs/betweenSeconds(日期毫秒/秒差,end - start);MapUtil:新增 sortByKey(按键升序便捷版)、getStr(map, key)(单参,缺失返回 null);CollUtil:新增 get(collection, index, defaultValue)(越界/空集合安全取值带默认值,支持负索引);P4Features27Test(4 例);全模块 590 测试全绿,sure-core 指令覆盖率 88.8%,SpotBugs 0 告警。StrUtil:新增 equalsAny/equalsAnyIgnoreCase(等于任意候选值)、totalLength(多字符串总长度);FileUtil:新增 getParent(String/File)(父目录路径)、isDirEmpty(目录判空)、pathEquals(规范化路径比较);DateUtil:新增 isOverlap(时间段重叠判断)、rangeToList(按日/时/分等步进生成日期区间,含头含尾);MapUtil:新增 getInt/getLong/getDouble/getBool 单参便捷版(缺失返回 0/false);MapBuilder 新增 create/putAll/build(immutable);FileLength 上限调整至 2000(核心工具类持续增长,StrUtil 已 1700+ 行);P4Features28Test(4 例);全模块 594 测试全绿,sure-core 指令覆盖率 88.9%,SpotBugs 0 告警。NumberUtil:新增 range(long,long,long)(长整型序列)、max/min(变参最大/最小值,null 安全);ReUtil:新增 getLast(提取最后一个匹配的分组,支持索引与命名分组);ConvertUtil:新增 toByteArray/toSet(数组/集合转 byte 数组与去重集合,保序);NetUtil:新增 getLocalMacAddress(本机 MAC,格式 AA:BB:CC:DD:EE:FF,优先非回环网卡);SecureUtil:新增 md5/sha1/sha256/sha512 字节数组重载(文件摘要场景);P4Features29Test(4 例)与 P4HashBytesTest(2 例);全模块 600 测试全绿,sure-core 指令覆盖率 88.9%,SpotBugs 0 告警。ArrayUtil:新增 distinct(类型安全去重,保持首次出现顺序)、empty(Class)(指定类型空数组);BooleanUtil:新增 xor(布尔异或,奇数个 true 返回 true);ObjectUtil:新增 emptyToNull(空字符串/集合/Map/数组转 null)、isValidIfNumber(有效数字判断);HexUtil:新增 isHexNumber(十六进制数判断,支持 0x 前缀);RandomUtil:新增 randomBigDecimal([start, end] 区间随机小数,含端点);SystemUtil:新增 getTotalThreadCount(JVM 活动线程数);P4Features30Test(4 例);全模块 604 测试全绿,sure-core 指令覆盖率 89.0%,SpotBugs 0 告警。JSONObject:新增 getBigDecimal(key, 默认值)、getBigInteger(key[, 默认值]);JSONArray:新增 getBigDecimal(index, 默认值)、getBigInteger(index[, 默认值]);CharUtil:新增 toString(char)(字符转字符串)、isEmoji(char)(BMP Emoji 区段)与 isEmoji(int)(支持补充平面码点,如 U+1F600);UrlUtil:新增 normalize(URL 规范化:缺协议补 http://、去末尾斜杠);P4Features31Test(2 例)与 P4JsonBigNumberTest(3 例);修正 MiscUtilTest.testRandom 脆弱断言(scale 后可能等于上限);全模块 609 测试全绿,sure-core 指令覆盖率 89.0%,SpotBugs 0 告警。EmojiUtil:新增 isEmoji(String)(整串是否全为 Emoji)、containsEmoji(是否包含 Emoji)、removeAllEmojis(移除全部 Emoji,按码点遍历支持补充平面);DesensitizedUtil:新增 ipv6(IPv6 脱敏,保留首末段,压缩地址原样返回);BitUtil:新增 get(byte[], int)(字节数组指定位读取,大端位序);P4Features32Test(4 例);全模块 613 测试全绿,sure-core 指令覆盖率 89.1%,SpotBugs 0 告警。ExceptionUtil:新增 unwrap(逐层剥离包装异常,返回最内层);Assert:新增 fail(无条件抛出断言失败异常,支持模板占位符);ThreadUtil:新增 execute(后台线程池执行任务);EnumUtil:新增 getFieldValues(获取枚举常量指定字段的值列表);P4Features33Test(4 例);全模块 617 测试全绿,sure-core 指令覆盖率 89.1%,SpotBugs 0 告警。HashUtil:新增 md5(byte[])/sha1(byte[])/sha256(byte[])/sha512(byte[])(返回原始摘要字节,便于流式摘要场景);IdUtil:新增 fastSimpleUUID(快速 UUID,不含连字符);P4Features34Test(2 例);全模块 619 测试全绿,sure-core 指令覆盖率 89.1%,SpotBugs 0 告警。BeanUtil:新增 toBean(统一转换入口:Map 走 mapToBean、Bean 走 copyProperties);Dict:新增 getBigDecimal(key[, 默认值])、getBigInteger(key[, 默认值]);JSONObject/JSONArray:新增 getLocalDate、getLocalDateTime;ConvertUtil:toLocalDate/toLocalDateTime 支持 Long 时间戳输入;P4Features35Test(2 例)与 P4JsonLocalDateTimeTest(2 例);全模块 623 测试全绿,sure-core 指令覆盖率 89.0%,SpotBugs 0 告警。StrSimilarity:新增 identical(完全相同返回 1.0,否则返回相似度分数);DateUtil:新增 current(当前毫秒时间戳)、currentSeconds(当前秒级时间戳);P4Features36Test(2 例);全模块 625 测试全绿,SpotBugs 0 告警。maven.compiler.release 固定为 21,仅支持 JDK 21 及以上版本;OrderedMap / CaseInsensitiveMap 在 JDK 模块化环境下的 Map.Entry 可访问性问题;AesUtil / DesUtil 缺少 com.sure.tool.codec.HexUtil import 导致的编译失败;{@code {}} 等 6 处)导致的 release 阶段
javadoc:jar doclint 构建失败;ci.yml JaCoCo 上传补全 sure-captcha / sure-jwt / sure-dfa 三个模块。SECURITY.md 明确安全响应承诺(24h 确认 / 72h 修复评估 / 14 天发布窗口)与依赖漏洞应急 SOP;pom.xml 的 dependencyManagement;
测试日志后端使用已修复 log4j 2.25.4+;sure-core)零第三方运行期依赖,攻击面最小化。首个可运行快照,包含上述全部模块与工具类。