Sub Modules
Since v3.1.0
Arkenv definitions can be organized by using sub modules.
A common scenario for sub modules is when you want your configuration split into multiple files.
For example, you may want to define your database configuration in a different class / file.
class DatabaseConfig : Arkenv() {
val port: Int by argument()
}
class Ark : Arkenv() {
val name: String by argument()
val database = module(DatabaseConfig())
}
The above example shows how to use the module
function to register
another Arkenv instance as a module, which will then be parsed together
with the root module that it is defined in.
The sub module’s properties can then be accessed after parsing.
fun main(args: Array<String>) {
val ark = Ark().parse(args)
println(ark.database.port)
}
The sub modules will be parsed using the root module’s features.
Recursive modules are not supported and will lead to a stack overflow.
Plain classes
Since v3.2.0
For plain classes, the module function is used to provide a delegate.
object Module {
val port: Int by argument()
}
object Configuration {
val subModule by module(Module)
}