Kora облачно ориентированный серверный фреймворк написанный на Java для написания Java / Kotlin приложений с упором на производительность, эффективность, прозрачность сделанный разработчиками Т-Банк / Тинькофф

Kora is a cloud-oriented server-side Java framework for writing Java / Kotlin applications with a focus on performance, efficiency and transparency made by T-Bank / Tinkoff developers

GraalVM Native

Kora создает свои вспомогательные классы во время компиляции, не использует Reflection API во время работы, не использует динамических прокси, не использует генерацию байт-кода во время компиляции и во время работы, так что проблем для сборки нативного образа со стороны самой Kora нет.

Пример сборки нативного образа с помощью плагина для gradle:

Плагин build.gradle:

plugins {
    id "org.graalvm.buildtools.native" version "0.10.4"
}

Настройка плагина build.gradle:

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
    }
}

Плагин build.gradle.kts:

plugins {
    id("org.graalvm.buildtools.native") version("0.10.4")
}

Настройка плагина build.gradle.kts:

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.

Проверенные модули, которые должны работать без дополнительной конфигурации:

Посмотреть примеры рабочих нативных сервисов можно в репозитории с примерами.