An open API service indexing awesome lists of open source software.

https://github.com/CarmJos/configured

:memo: Easy (to make) Configurations! A simple, easy-to-use and universal solution for managing configuration files. Enjoy the ease of use with customizable formats for loading, reading, and updating your configuration files.
https://github.com/CarmJos/configured

configuration configuration-files configuration-management development easy-to-use fastdev hocon json library sql yaml

Last synced: 5 months ago
JSON representation

:memo: Easy (to make) Configurations! A simple, easy-to-use and universal solution for managing configuration files. Enjoy the ease of use with customizable formats for loading, reading, and updating your configuration files.

Awesome Lists containing this project

README

          


Banner

[![version](https://img.shields.io/github/v/release/CarmJos/configured)](https://github.com/CarmJos/configured/releases)
[![License](https://img.shields.io/github/license/CarmJos/configured)](https://www.gnu.org/licenses/lgpl-3.0.html)
[![workflow](https://github.com/CarmJos/configured/actions/workflows/maven.yml/badge.svg?branch=master)](https://github.com/CarmJos/configured/actions/workflows/maven.yml)
[![CodeFactor](https://www.codefactor.io/repository/github/carmjos/configured/badge)](https://www.codefactor.io/repository/github/carmjos/configured)
![CodeSize](https://img.shields.io/github/languages/code-size/CarmJos/configured)
![](https://visitor-badge.glitch.me/badge?page_id=configured.readme)

README LANGUAGES [ [**English**](README.md) | [中文](README_CN.md) ]

# configured _(config framework)_

logo

_**"Once set, Simple get."**_

A simple, easy-to-use and universal solution for managing, loading, reading,
and updating configuration files.

Supported **JSON**, **YAML**, **Hocon**, **TOML**, **SQL**, **MongoDB**... and much more!

## Features & Advantages

Supported [YAML](impl/yaml), [JSON](impl/json), [HOCON](impl/hocon) and [SQL](impl/sql) based configuration files
format.

- Class-based mechanism for initializing, loading, retrieving, and updating configuration files, ensuring convenience
and efficiency.
- Supports manual serialization and deserialization of complex configurations.
- Offers multiple builder forms for rapid construction of `ConfigValue>` objects.
- Enables specification of configuration paths, comments, and more via annotations.

## Development

For the latest JavaDoc release, [CLICK HERE](https://CarmJos.github.io/configured).

For a detailed development guide, [CLICK HERE](.doc/README.md).

### Preview

To quickly demonstrate the applicability of the project, here are a few practical demonstrations:

- [Database configuration.](demo/src/main/java/cc/carm/lib/configuration/demo/DatabaseConfiguration.java)
- [Demonstration of all types of configuration instance classes.](demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/DemoConfiguration.java)

Check out all code demonstrations [HERE](demo/src/main/java/cc/carm/lib/configuration/demo/DatabaseConfiguration.java).
For more examples, see the [Development Guide](.doc/README.md).

```java

@ConfigPath(root = true)
@HeaderComments("Configurations for sample")
public interface SampleConfig extends Configuration {

@InlineComment("Enabled?") // Inline comment
ConfiguredValue ENABLED = ConfiguredValue.of(true);

@HeaderComments("Server configurations") // Header comment
ConfiguredValue PORT = ConfiguredValue.of(Integer.class);

@HeaderComments({"[ UUID >-----------------------------------", "A lot of UUIDs"})
@FooterComments("[ UUID >-----------------------------------")
ConfiguredList UUIDS = ConfiguredList.builderOf(UUID.class).fromString()
.parse(UUID::fromString).serialize(UUID::toString)
.defaults(
UUID.fromString("00000000-0000-0000-0000-000000000000"),
UUID.fromString("00000000-0000-0000-0000-000000000001")
).build();

@ConfigPath("info") // Custom path
interface INFO extends Configuration {

@HeaderComments("Configure your name!") // Header comment
ConfiguredValue NAME = ConfiguredValue.of("Joker");

@ConfigPath("how-old-are-you") // Custom path
ConfiguredValue AGE = ConfiguredValue.of(24);

}

}

```

```java
public class Sample {
public static void main(String[] args) {
// 1. Make a configuration provider from a file.
ConfigurationHolder> holder = YAMLConfigFactory.from("target/config.yml")
.resourcePath("configs/sample.yml")
.indent(4) // Optional: Set the indentation of the configuration file.
.build();

// 2. Initialize the configuration classes or instances.
holder.initialize(SampleConfig.class);
// 3. Enjoy using the configuration!
System.out.println("Enabled? -> " + SampleConfig.ENABLED.resolve()); // true
SampleConfig.ENABLED.set(false);
System.out.println("And now? -> " + SampleConfig.ENABLED.resolve()); // false
// p.s. Changes not save so enable value will still be true in the next run.

System.out.println("Your name is " + SampleConfig.INFO.NAME.resolve() + " (age=" + SampleConfig.INFO.AGE.resolve() + ")!");
}
}

```

```yaml
# Configurations for sample

enabled: true #Enabled?

# Server configurations
port:

# [ UUID >-----------------------------------
# A lot of UUIDs
uuids:
- 00000000-0000-0000-0000-000000000000
- 00000000-0000-0000-0000-000000000001
# [ UUID >-----------------------------------

info:
# Configure your name!
name: Joker
how-old-are-you: 24
```

### Dependencies

#### Maven Dependency

Remote Repository Configuration

```xml



maven
Maven Central
https://repo1.maven.org/maven2



configured
GitHub Packages
https://maven.pkg.github.com/CarmJos/configured

```

Generic Native Dependency

```xml




cc.carm.lib
configured-core
[LATEST RELEASE]
compile



cc.carm.lib
configured-yaml
[LATEST RELEASE]
compile



cc.carm.lib
configured-gson
[LATEST RELEASE]
compile

```

#### Gradle Dependency

Remote Repository Configuration

```groovy
repositories {

// Using Maven Central Repository for secure and stable updates, though synchronization might be needed.
mavenCentral()

// Using GitHub dependencies for real-time updates, configuration required (recommended).
maven { url 'https://maven.pkg.github.com/CarmJos/configured' }

}
```

Generic Native Dependency

```groovy

dependencies {

// Basic implementation part, requiring custom implementation of “Provider” and “Wrapper”.
api "cc.carm.lib:configured-core:[LATEST RELEASE]"

// YAML file-based implementation, compatible with all Java environments.
api "cc.carm.lib:configured-yaml:[LATEST RELEASE]"

// JSON file-based implementation, compatible with all Java environments.
api "cc.carm.lib:configured-gson:[LATEST RELEASE]"

}
```

## Derived Projects

### [**MineConfiguration**](https://github.com/CarmJos/MineConfiguration) (by @CarmJos)

configured for MineCraft!
Easily manage configurations on MineCraft-related server platforms.

Currently, it supports BungeeCord, Velocity, Bukkit (Spigot) servers,
with more platforms to be supported soon.

## Support and Donation

If you appreciate this plugin, consider supporting me with a donation!

Thank you for supporting open-source projects!

Many thanks to Jetbrains for kindly providing a license for us to work on this and other open-source projects.

[![](https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg)](https://www.jetbrains.com/?from=https://github.com/CarmJos/configured)

Many thanks to [ArtformGames](https://github.com/ArtformGames) for their
strong support and active contribution to this project!

ArtformGames

## Open Source License

This project's source code is licensed under
the [GNU LESSER GENERAL PUBLIC LICENSE](https://www.gnu.org/licenses/lgpl-3.0.html).