Hocon

Simple Hocon Configuration Library

轻量 Hocon 配置库

简介

这是一个轻量级的 Hocon 配置库,没有其他依赖项。

注意,这是一个使用 Hocon 格式的配置库,而不是完整的 Hocon 解析库。

该配置库除了使用结点 -- Node 手动获取配置外,还可以使用 @Setting 注解字段,以自动获取配置。

使用 NodeMap 的 void modify(Object target); 方法,可以用结点的值修改目标对象对应名称用 @Setting 注解的字段。

使用 NodeMap 的 void extract(Object source); 方法,可以提取源对象对应名称用 @Setting 注解的字段的值到结点。

另外该库支持对注释内容的翻译,可通过设置翻译器实现本地化效果。

具体使用方法可以查看 Javadoc

使用依赖

Maven

org.soraworld

hocon

1.2.3-SNAPSHOT

pom

Gradle

compile 'org.soraworld:hocon:1.2.3-SNAPSHOT'

仓库

repositories {

jcenter()

maven {

url = 'https://oss.jfrog.org/artifactory/oss-release-local/' //''https://oss.jfrog.org/artifactory/libs-release/'

}

maven {

url = 'https://oss.jfrog.org/artifactory/oss-snapshot-local/' //'https://oss.jfrog.org/artifactory/libs-snapshot/'

}

}

专用HOCON格式

根结点

根结点即文件所对应的结点, 根结点必定是一个 NodeMap 结点.

根结点下存储 keyvalue 键值对, 其中 value 值可以是

基础结点(NodeBase), 列表结点(NodeList), 映射结点(NodeMap)

基础结点(值实质是字符串)

键 和 值 之间用 = 连接, 如果字符串含有空格或其他特殊字符,

则需要在字符串两端加双引号 "

详细特殊字符的正则表达为 `.*[":=,+?`!@#$^&*{}\[\]\\].*

# 井号开头的行全部认为是注释

key1 = abc

key2 = "字符串值2"

key3 = 123.456

key4 = false

# 值的内容代表 空 null

keyNull = null

# 值的内容代表字符串 "null"

stringNull = "null"

列表结点

键 和 值 之间用 = 连接, 如果列表为空, 直接接 关闭的方括号 [],

如过列表不为空, 接 左方括号 [ , 新行填列表元素, 每个元素都新起一行.

元素结束, 新行 接 右方括号 ].

缩进只是为了美观, 元素可以不用缩进, 顶行写也是可以的.

# 字符串列表

stringlist = [

"字符串列表元素1"

字符串列表元素2

"string elemnet 3"

HelloWorld

]

# 整数列表

intlist = [

1

3

5

7

]

# 空列表

emptylist = []

# (整数)列表列表

listlist = [

[

1

2

4

]

[

6

8

9

]

]

# 映射列表(其存储的元素是 映射)

maplist = [

# 第一个映射

{

key1 = abc

key2 = 123

}

# 第二个映射

#缩进只是为了美观, 元素可以不用缩进, 顶行写也是可以的.

{

key1 = false

hello = "Hello World"

}

]

映射结点

键 和 值 之间没有内容, 如果映射为空, 直接接 关闭的花括号 {},

键 只能为字符串, 如果键含有特殊字符 则要加双引号 ",

如过映射不为空, 接 左花括号 { , 新行填 映射键值对, 每个键值对都新起一行.

元素结束, 新行 接 右花括号 }.

缩进只是为了美观, 元素可以不用缩进, 顶行写也是可以的.

# 整数映射

int_map {

key1 = 233

ke2 = 456

xxx = 5749850394

}

# 空映射

# 键名可以为中文(常规使用时不建议)

空映射 {}

# 特殊字符的键要加 引号 ""

"!himmelt&shiki" {

# 这样也是空映射

}

# 嵌套映射, 和 yaml/json 等 的层级关系一样

父结点 {

键1 = 值1

子基础结点 = 值2

空列表1 = []

列表2 = [

1

3

4

]

子列表结点 = [

{

键1 = 值1

键2 = 值2

空列表1 = []

}

{

键11 = 值11

键22 = 值22

空列表11 = []

}

]

子映射结点 {

孙子键1 = "孙子值1"

孙子映射结点 {

重孙子键 = 1234567

}

}

}

示例

public class Test{

@Setting(comment = "comment.lang")

protected String lang = "zh_cn";

@Setting(comment = "comment.debug")

protected boolean debug = false;

protected final Path confile;

protected final Options options = Options.build();

public Manager(Path path) {

this.path = path;

this.options.setTranslator(this::trans);

this.options.registerType(new LocationSerializer());

this.confile = path.resolve(plugin.getId().replace(' ', '_') + ".conf");

}

public boolean load() {

try {

FileNode rootNode = new FileNode(confile.toFile(), options);

rootNode.load(true);

rootNode.modify(this);

options.setDebug(debug);

return true;

} catch (Throwable e) {

return false;

}

}

}

hocon配置文件_GitHub - Himmelt/Hocon: Simple Hocon Configuration Library [轻量 Hocon 配置库]...相关推荐

  1. android log4,GitHub - oronno/log4android: Log4Android - Simple Logging Wrapper Library for Android

    log4android Log4Android - Simple Logging Wrapper Library for Android Tired writing TAG each time wri ...

  2. java me xizai_GitHub - seven332/XiaZai: A simple Android download library

    XiaZai 这是一个 Android 平台上基于 OkHttp 的简单下载库. It's a simple Android download library based on OkHttp. Usa ...

  3. hocon配置文件_Scala - 使用 typesafe.config 管理你的配置文件

    Scala - 使用 typesafe.config 管理你的配置文件 14 July 2016 为了统一管理配置项,我在真是操碎了心啊.现在我分享下这两天的研究成果. 首先先介绍下 typesafe ...

  4. python configuration is still_通过Python配置关闭Release优化

    通过自己之前转载的一篇文章,<VS设置增量编译>,在此基础上增加了Release版本如何关闭优化并自动生成pdb文件,最终实现思路也比较简单,就用Python自带的ElementTree库 ...

  5. java配置文件中的plugin,启用ContextReplacementPlugin以忽略webpack中的配置和测试设置文件...

    我正在开发一个项目,其中我的文件夹结构如下 lib apps src / index.js(webpack的入口文件)jestEnvSetup.js webpack.config.js package ...

  6. SDS(Simple Dynamic String)一个简易动态字符串库

    SDS(Simple Dynamic Strings)是一个C语言字符串库,设计中增加了从堆上分配内存的字符串,来扩充有限的libc字符处理的功能,使得: 使用更简便 二进制安全 计算更有效率 而且仍 ...

  7. mysql mha配置文件详解_十四、MySQL MHA 高可用配置(一)

    MHA 高可用 1.准备三台机器 IP:10.0.0.51 主机名:db01 内存:2G IP:10.0.0.52 主机名:db02 内存:2G IP:10.0.0.53 主机名:db03 内存:2G ...

  8. mybatis配置文件不在resources目录下时需进行的额外配置方法

  9. python 元组捷豹_GitHub - jaguarzls/pyecharts: Python Echarts Plotting Library

    pyecharts Python ❤️ Echarts = pyecharts

最新文章

  1. vivo 2019:关于企业文化如何影响手机企业发展的三个追问
  2. Shell(8)——for、while、until
  3. WPF对某控件添加右键属性
  4. oracle中如何创建dblink
  5. 小学数学N合一(洛谷P2433题题解,Java语言描述)
  6. (王道408考研数据结构)第五章树-第三节2:二叉树构造和重建
  7. aop springboot 传入参数_springboot用aop做参数校验
  8. c/c++中的引用变量
  9. Linux+ps进程解释,linux ps查看进程命令详解
  10. 微信小程序图片全屏显示
  11. appscan 9.0.3.12 版本下载
  12. 基于JAVA便利店库存管理计算机毕业设计源码+系统+lw文档+部署
  13. 规范JavaScript注释
  14. 计划策略(planning strategy)
  15. 静态库和动态库运行时间的区别
  16. java中立方根方法,Java Math.cbrt() 方法
  17. 计算机课学生评价用语,主题班会课对学生的评价用语
  18. Codeforces Gym 101173 K. Key Knocking (构造)
  19. Maven分模块管理时com.xx.xx.service等找不到
  20. 神通数据库connect by用法

热门文章

  1. wap站点优于传统站点的异同分析
  2. 软件需求说明书文档格式
  3. php ppt转换成图片格式,帮忙看下,这个程序实现使用office的COM组件将ppt转换为图片...
  4. PHP7不能用string类名,thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法...
  5. 用神经网络分类一维矩阵
  6. 神经网络的耦合作用与规范场
  7. sql server 多条记录数据合并为一条_如何利用Python实现SQL自动化?
  8. 【Leetcode | easy】罗马数字转整数
  9. LaTex 各种特殊符号
  10. 记录一次血崩式的CPLD不稳定 bug经验