Kora создает свои вспомогательные классы во время компиляции, не использует Reflection API во время работы, не использует динамических прокси, не использует генерацию байт-кода во время компиляции и во время работы, так что проблем для сборки нативного образа со стороны самой Kora нет.
Пример сборки нативного образа с помощью плагина для gradle:
===! ":fontawesome-brands-java: Java"
Плагин `build.gradle`:
```groovy
plugins {
id "org.graalvm.buildtools.native" version "0.11.0"
}
```
Настройка плагина `build.gradle`:
```groovy
graalvmNative {
binaries {
main {
imageName = "application"
mainClass = "ru.tinkoff.kora.example.Application"
debug = true
verbose = true
buildArgs.add("--report-unsupported-elements-at-runtime")
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(17)
vendor = JvmVendorSpec.matching("GraalVM Community")
}
}
}
metadataRepository {
enabled = true
}
}
```
=== ":simple-kotlin: Kotlin"
Плагин `build.gradle.kts`:
```groovy
plugins {
id("org.graalvm.buildtools.native") version("0.11.0")
}
```
Настройка плагина `build.gradle.kts`:
```groovy
graalvmNative {
binaries {
named("main") {
imageName.set("application")
mainClass.set("ru.tinkoff.kora.example.Application")
debug.set(true)
verbose.set(true)
buildArgs.add("--report-unsupported-elements-at-runtime")
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(17)
vendor = JvmVendorSpec.matching("GraalVM Community")
}
}
}
metadataRepository {
enabled.set(true)
}
}
```
Некоторые библиотеки требуют дополнительной конфигурации, часть конфигураций сделана в Kora.
Проверенные модули, которые должны работать без дополнительной конфигурации:
- Конфигурация
- Json
- Logback
- Пробы
- Метрики
- Трасcировка
- HTTP сервер
- HTTP клиент
- OpenAPI генерация
- OpenAPI отображение
- База данных JDBC (Postgres)
- База данных R2DBC (Postgres)
- База данных Vertx (Postgres)
- База данных Cassandra
- Kafka
- gRPC сервер
- gRPC клиент
- Отказоустойчивость
- Кеш
- Валидация
- Планировщик
- Логирование
Посмотреть примеры рабочих нативных сервисов можно в репозитории с примерами.