https://github.com/saicone/settings
Java library to interpret multiple data formats as flexible configuration
https://github.com/saicone/settings
configuration configuration-parser gson hocon java json settings toml yaml
Last synced: 2 months ago
JSON representation
Java library to interpret multiple data formats as flexible configuration
- Host: GitHub
- URL: https://github.com/saicone/settings
- Owner: saicone
- License: mit
- Created: 2024-01-13T14:15:32.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-12-21T02:10:25.000Z (6 months ago)
- Last Synced: 2025-12-22T23:07:24.245Z (6 months ago)
- Topics: configuration, configuration-parser, gson, hocon, java, json, settings, toml, yaml
- Language: Java
- Homepage: https://docs.saicone.com/settings
- Size: 413 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
Settings
Java library to interpret multiple data formats as flexible configuration.
Settings library handle multiple data formats as configuration in a flexible way:
* Node templates and transformation.
* Node value substitution in non-compatible formats (like json and yaml).
* Fallback format reader.
* Iterable nodes.
* Data update parameters.
* Comparable paths to get nodes.
* Multi-layer node values.
Currently supporting the formats:
* [HOCON](https://github.com/lightbend/config/blob/main/HOCON.md)
* [JSON](https://www.json.org/) (with [Gson](https://github.com/google/gson))
* [TOML](https://toml.io/en/v1.0.0)
* [YAML](http://yaml.org/spec/1.1/current.html)
Take in count this library is not focused as an object serializer, the main purpose is making flexible interactions with multiple data formats at the same time.
It also has simple methods to get nodes as multiple data types if you want to implement your own object serializer.
```java
// Load settings from Map
Map map = new HashMap<>();
map.put("key", "value");
map.put("otherkey", 1234);
Settings settings = new Settings();
settings.merge(map);
// Settings from any file named "myfile", the format can be any supported format.
// If file doesn't exist, the optional file "myfile.json" inside .jar will be used.
SettingsData data = SettingsData.of("myfile.*").or(DataType.INPUT_STREAM, "myfile.json");
// Load settings by providing a parent folder.
// Also, optional file will be saved inside the folder if original file doesn't exist
File folder = new File("folder");
Settings settings = data.load(folder, true);
```
## Dependency
How to use Settings library in your project.
build.gradle
```groovy
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.saicone.settings:settings:1.0.5'
// Other modules
implementation 'com.saicone.settings:settings-gson:1.0.5'
implementation 'com.saicone.settings:settings-hocon:1.0.5'
implementation 'com.saicone.settings:settings-toml:1.0.5'
implementation 'com.saicone.settings:settings-yaml:1.0.5'
}
```
build.gradle.kts
```kotlin
repositories {
maven("https://jitpack.io")
}
dependencies {
implementation("com.saicone.settings:settings:1.0.5")
// Other modules
implementation("com.saicone.settings:settings-gson:1.0.5")
implementation("com.saicone.settings:settings-hocon:1.0.5")
implementation("com.saicone.settings:settings-toml:1.0.5")
implementation("com.saicone.settings:settings-yaml:1.0.5")
}
```
pom.xml
```xml
Jitpack
https://jitpack.io
com.saicone.settings
settings
1.0.5
compile
com.saicone.settings
settings-gson
1.0.5
compile
com.saicone.settings
settings-hocon
1.0.5
compile
com.saicone.settings
settings-toml
1.0.5
compile
com.saicone.settings
settings-yaml
1.0.5
compile
```
## Relocated Dependency
How to implement and relocate Settings library in your project.
build.gradle
```groovy
plugins {
id 'com.gradleup.shadow' version '9.2.2'
}
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.saicone.settings:settings:1.0.5'
// Other modules
implementation 'com.saicone.settings:settings-gson:1.0.5'
implementation 'com.saicone.settings:settings-hocon:1.0.5'
implementation 'com.saicone.settings:settings-toml:1.0.5'
implementation 'com.saicone.settings:settings-yaml:1.0.5'
}
jar.dependsOn (shadowJar)
shadowJar {
// Relocate packages (DO NOT IGNORE THIS)
relocate 'com.saicone.types', project.group + '.libs.types'
relocate 'com.saicone.settings', project.group + '.libs.settings'
// Exclude unused classes (optional)
minimize()
}
```
build.gradle.kts
```kotlin
plugins {
id("com.gradleup.shadow") version "9.2.2"
}
repositories {
maven("https://jitpack.io")
}
dependencies {
implementation("com.saicone.settings:settings:1.0.5")
// Other modules
implementation("com.saicone.settings:settings-gson:1.0.5")
implementation("com.saicone.settings:settings-hocon:1.0.5")
implementation("com.saicone.settings:settings-toml:1.0.5")
implementation("com.saicone.settings:settings-yaml:1.0.5")
}
tasks {
jar {
dependsOn(tasks.shadowJar)
}
shadowJar {
// Relocate packages (DO NOT IGNORE THIS)
relocate("com.saicone.types", "${project.group}.libs.types")
relocate("com.saicone.settings", "${project.group}.libs.settings")
// Exclude unused classes (optional)
minimize()
}
}
```
pom.xml
```xml
Jitpack
https://jitpack.io
com.saicone.settings
settings
1.0.5
compile
com.saicone.settings
settings-gson
1.0.5
compile
com.saicone.settings
settings-hocon
1.0.5
compile
com.saicone.settings
settings-toml
1.0.5
compile
com.saicone.settings
settings-yaml
1.0.5
compile
org.apache.maven.plugins
maven-shade-plugin
3.6.1
com.saicone.types
${project.groupId}.libs.types
com.saicone.settings
${project.groupId}.libs.settings
true
package
shade
```
> [!NOTE]
> This project use [Types library](https://github.com/saicone/types) to convert data types, so it's required to relocate it's package along with settings package.