写 YAML 的人大概都有过这种经历:配置要改一个嵌套字段,得先 parse 成 Map,一层层 get 下去,改完再 dump 回来。一次两次还行,项目里配置多了就有点烦了。
我自己做 Java 项目的时候,经常要处理 YAML 配置:合并环境配置、把嵌套配置拍平、模板里替换变量、上线前给敏感字段打码。SnakeYAML 本身只管 parse 和 dump,这些操作每次都得自己写。写多了就想干脆封装成一个库,于是就有了 sapera-yaml。
坐标在 Maven Central,直接拉:
<dependency>
<groupId>cn.frostlock</groupId>
<artifactId>sapera-yaml</artifactId>
<version>0.1.0</version>
</dependency>
用起来大概是这样:
YamlDocument doc = SaperaYaml.create()
.put("server.port", 8080)
.put("server.hosts[0]", "a")
.put("server.hosts[1]", "b");
String yaml = doc.toYaml();
路径直接写,中间节点自动建,不用再手动 new 一堆 HashMap。
目前有的功能:
- 路径式增删改查,a.b[0].c 这种写法
- 深度合并:两份配置合成一份,list 是替换还是拼接可选
- 扁平化 / 反扁平化:嵌套配置拍平成 key-value,也能还原
- 占位符替换:${env.PORT} 这种
- 字段过滤和脱敏:导出配置前把 password 打码
- diff:两份配置差在哪,一眼能看明白
- 轻量校验:必填、类型、枚举
- JavaBean 绑定:和 POJO 互转
- 重复键检测:loadStrict,防止配置里藏着重复 key
Java 8 起步,依赖只有 SnakeYAML,体积不大。
仓库在 Gitee:https://gitee.com/Nicolas_Z_013/sapera-yaml
有 README 有 wiki,欢迎试用,遇到问题直接提 issue。