Nucleus
Performance & nativeGraalVM Native Image

Configuration

Le DSL graalvm { } complet — toolchain, nom d'image, march, args de build, repository de metadata, sous-réglages macOS.

nucleus.application.graalvm { … } est toute la surface Gradle GraalVM. Le plugin Nucleus étend le DSL compose.desktop.application de JetBrains — même forme, plus un bloc graalvm, le flag AOT cache, les formats de store, les deep links et le reste. Tout ci-dessous est typé Property et paresseux.

Quickstart

nucleus.application {
    mainClass = "com.example.MainKt"

    graalvm {
        isEnabled = true
        imageName = "my-app"

        // La Java Toolchain Gradle télécharge Liberica NIK 25 en local.
        // En CI, configure d'abord le JDK avec graalvm/setup-graalvm@v1.
        javaLanguageVersion = 25
        jvmVendor = JvmVendorSpec.BELLSOFT

        buildArgs.addAll(
            "-H:+AddAllCharsets",
            "-Djava.awt.headless=false",
            "-Os",
            "-H:-IncludeMethodData",
        )

        metadataRepository {
            enabled = true           // défaut
            version = "0.10.6"       // défaut
            excludedModules.add("com.example:my-lib")
        }

        // Optionnel — seulement en présence de metadata app-spécifique que
        // le pipeline automatique ne couvre pas. Rare.
        nativeImageConfigBaseDir.set(
            layout.projectDirectory.dir("src/main/graalvm-config"),
        )
    }
}

Référence graalvm { }

PropriétéTypeDéfautNotes
isEnabledProperty<Boolean>falseInterrupteur principal.
javaLanguageVersionProperty<Int>25Version de langue de la toolchain ; déclenche le download auto par Gradle.
jvmVendorProperty<JvmVendorSpec>Mets BELLSOFT pour auto-provisionner Liberica NIK.
imageNameProperty<String>nom de projetNom du binaire de sortie.
marchProperty<String>"native"native pour le CPU courant, compatibility pour des CPU plus vieux.
buildArgsListProperty<String>videArgs supplémentaires passés à native-image.
nativeImageConfigBaseDirDirectoryPropertyRépertoire de reachability-metadata.json app-spécifique. Rarement nécessaire.
macOSGraalvmMacOSSettingsSous-bloc macOS (voir plus bas).
metadataRepositoryMetadataRepositorySettingsenabledOracle Reachability Metadata Repository (voir plus bas).

Args de build recommandés

ArgumentBut
-H:+AddAllCharsetsInclure tous les charsets — requis pour les I/O texte.
-Djava.awt.headless=falseActiver le support GUI — obligatoire pour les apps desktop.
-OsOptimiser pour la taille du binaire.
-H:-IncludeMethodDataRetirer la metadata de méthodes ; gagne plusieurs MB.

metadataRepository { }

Le plugin Nucleus télécharge automatiquement le Reachability Metadata Repository d'Oracle et résout les entrées pour chaque dépendance runtime de le classpath.

PropriétéTypeDéfautNotes
enabledProperty<Boolean>trueDésactive pour sauter le repository entièrement.
versionProperty<String>"0.10.6"Surcharge la version de l'artefact du repository.
excludedModulesSetProperty<String>videCoordonnées group:artifact à exclure.
moduleToConfigVersionMapProperty<String, String>videÉpingle la version du répertoire de metadata pour un module donné.
metadataRepository {
    moduleToConfigVersion.put("io.ktor:ktor-client-core", "3.0.0")
    excludedModules.add("group:noisy-lib")
}

macOS { } — GraalvmMacOSSettings

PropriétéDéfautNotes
cStubsSrcRépertoire de sources pour des stubs C supplémentaires linkés dans le binaire.
minimumSystemVersion"12.0"Patch Mach-O LC_VERSION_MIN_MACOSX.
macOsSdkVersion"26.0"Version SDK estampillée dans les headers Mach-O du launcher (contrôle l'éligibilité Liquid Glass).

Pas de variant release

Contrairement aux build types JVM, GraalVM n'a pas de variant release — pas de packageReleaseGraalvmNative, pas de runReleaseGraalvmNative. C'est volontaire :

  • L'élimination de code mort de ProGuard est redondante — native-image fait déjà la DCE en monde fermé au compile time.
  • ProGuard peut renommer des classes encore référencées par reachability-metadata.json, cassant le build silencieusement.

Utilise -Os dans buildArgs pour l'optimisation de taille. Pas de ProGuard.

`nativeImageConfigBaseDir` est généralement vide

Nucleus livre toute la metadata générique et plateforme-spécifique automatiquement. Sans besoin de nativeImageConfigBaseDir que pour des entrées app-spécifiques que les couches auto ne couvrent pas — c'est rare. Voir Metadata automatique pour les cinq couches.