cfg4k icon indicating copy to clipboard operation
cfg4k copied to clipboard

Flexible and easy to use config library written in kotlin

Build Status Coverage Status License Download

News

This repository is (will) be archived as I can no longer maintain it! But @rocketraman has forked it and published to mavencentral: https://github.com/rocketraman/cfg4k please continue using his repo!

Overview

Cfg4k is a configuration library made for Kotlin in Kotlin!

Features

  • Automatic reload
  • Interface binding
  • Ability to handle data classes automatically
  • All the complex types and generics are supported
  • Huge flexibility, custom sources
  • Easy to use
  • Bytebuddy provider will be able to compile your bindings at runtime (You will need to add the cfg4k-bytebuddy to your dependencies.)

For further information, use the wiki

Quick start

  1. Add the Bintray repository:
repositories {
    jcenter()
}
  1. Add the dependency for the module(s) that you are going to use
compile 'com.jdiazcano.cfg4k:cfg4k-core:$VERSION'
fun main(args: Array<String>) {
    val source = ClassPathConfigSource("global.properties")         // Create source
    val loader = PropertyConfigLoader(source)                       // Create loader
    val provider = ProxyConfigProvider(loader)                      // Create provider
    val databaseConfig = provider.bind<DatabaseConfig>("database")  // bind and use

    println("Name: ${databaseConfig.name()}")
    println("Url: ${databaseConfig.url()}")
    println("Port: ${databaseConfig.port()}")
}

/**
 * This interface defines a database configuration
 */
interface DatabaseConfig {
    /**
     * You can have javadocs inside your properties and this is really cool
     */
    fun url(): String
    fun port(): Int
    fun name(): String

    // if you have an unused property you know it and you can delete it
    val unused: String

    @Deprecated("You can even deprecate properties!")
    fun deprecated(): Boolean
    
    val youCanuseValuesToo: String
    val andNullables: Int?
}

Architeture overview

Lightbox

License

Licensed under the Apache License, Version 2.0. See LICENSE file.