Startup¶
- Plugins Package:
dev.inmo:micro_utils.startup.plugin
- Launcher Package:
dev.inmo:micro_utils.startup.launcher
This package contains unified simple Plugin
/Launcher
tools for separating of your apps parts
Launching logic:
flowchart TB
StartLauncherPlugin.startAsync
StartLauncherPlugin.startAsync --> KoinInit["Koin.init"]
KoinInit --> StartLauncherPlugin.setupDI
subgraph StartLauncherPlugin.setupDI
direction LR
AddDefaultDependencies["Default dependencies: config as JsonObject, config as object, CoroutineScope, Json"]
SubPluginsSetupDI["Calling setupDI in subplugins"]
AddDefaultDependencies --> SubPluginsSetupDI
end
StartLauncherPlugin.setupDI --> startKoin
startKoin --> StartLauncherPlugin.startPlugin
subgraph StartLauncherPlugin.startPlugin
direction LR
LaunchSubplugins["Asynchronously (in CoroutineScope from Koin) start subplugins"]
end
StartLauncherPlugin.startPlugin --> ReturnKoinAppAndLaunchJob["Return koinApp and laucnhing job"]
Plugin¶
To define plugin, you must use StartPlugin
as supertype for your plugin. Restrictions are simple: plugins must be an object
or class
with empty constructor. Basic sample is here:
Each plugin may contains to parts:
setupDI
function to set up DI partstartPlugin
function to start plugin
object YourPlugin : StartPlugin {
override fun Module.setupDI(config: JsonObject) {
// here you may setup any DI content you wish to be available in context of current Koin module
}
override fun startPlugin(koin: Koin) {
// all staff from setupDI and the same function of other plugins is available in koin
}
}
Launcher¶
Basically, launcher module can be used to start application directly from gradle
. Let’s imagine you have this gradle groovy config:
plugins {
id 'org.jetbrains.kotlin.jvm'
id "org.jetbrains.kotlin.plugin.serialization"
id 'application'
}
dependencies {
// kotlin and other dependencies
implementation ("dev.inmo:micro_utils.startup.launcher:$latest_version")
}
application {
mainClassName = 'dev.inmo.micro_utils.startup.launcher.MainKt'
}
You will be able to run your project with gradle command ./gradlew run --args="path/to/config.json"
. config.json
must contains something like:
In current case you will see in logger different logs about launching including log from HelloWorldPlugin
with text Hello world
.