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

GraalVM Native

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

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

Плагин build.gradle:

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

Настройка плагина 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.11.0")
}

Настройка плагина 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.

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

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