Aller au contenu

Native Image

Compilez une application JVM en exécutable natif ou en bibliothèque partagée avec elide native-image ou un artefact de projet Elide, ou compilez-la en WebAssembly.

Sur cette page

Native Image compile à l’avance une application JVM en exécutable autonome ou en bibliothèque partagée.

Compiler en ligne de commande

elide native-image -- -cp app.jar com.example.Main

Les arguments du compilateur se placent après -- ; elide native-image -- --help les liste. La réflexion, les ressources, JNI et les proxys nécessitent des métadonnées d’accessibilité. L’édition de liens finale nécessite une chaîne d’outils C sur l’hôte.

Artefact de projet

amends "elide:project.pkl"
import "elide:Jvm.pkl" as Jvm
import "elide:NativeImage.pkl" as Native

artifacts {
  ["app-jar"] = new Jvm.Jar {
    sources { "main" }
  }
  ["app"] = new Native.NativeImage {
    from { "app-jar" }
    entrypoint = "com.example.Main"
    type = "binary"
    options {
      optimization = "2"
      flags { "-H:+ReportExceptionStackTraces" }
    }
  }
}
PropriétéSignificationValeur par défaut
fromClés d’artefacts JAR (pas des chemins) ; vide signifie tous les JAR déclarés, ou un JAR des classes du projet.aucune
nameNom du fichier de sortie.le nom du projet
entrypointClasse principale.jvm.main
moduleNameModule de lancement pour les JAR modulaires ; voir ci-dessous.le module contenant le point d’entrée
type"binary" (exécutable) ou "library" (bibliothèque partagée)."binary"
optionsOptions du compilateur ; voir ci-dessous.—
dependsOnArtefacts à construire d’abord.aucun

La sortie va dans .dev/artifacts/native-image/, avec les arguments finaux dans native-image.args.

Options du compilateur

Propriété de optionsSignificationValeur par défaut
optimization"auto", "b" (build rapide), "s", "0" … "4"."auto"
driverMode"embedded" (le compilateur d’Elide) ou "external" (native-image depuis GRAALVM_HOME/JAVA_HOME)."embedded"
verboseSortie détaillée du compilateur.false
linkAtBuildTime.enabledTout lier au moment du build.true
linkAtBuildTime.packagesPaquets à lier au moment du build quand enabled vaut false.aucun
classInit.defaultInitialisation des classes par défaut : "buildtime" ou "runtime"."buildtime"
classInit.buildtime, classInit.runtimeClasses ou paquets initialisés au moment du build ou de l’exécution.aucun
exclusions.allCoordonnées exclues des deux chemins.les JAR du compilateur lui-même
exclusions.classpath, exclusions.modulepathCoordonnées exclues d’un seul chemin.aucune
pgo.enabledAppliquer les profils s’ils existent.true
pgo.profilesFichiers de profil.aucun
pgo.instrumentConstruire une image instrumentée qui enregistre des profils.false
pgo.samplingUtiliser des profils par échantillonnage.false
pgo.autoprofileFonctionnalités de profilage automatique.false
featuresClasses de fonctionnalités du compilateur à activer.aucune
flagsOptions native-image supplémentaires ; la modification d’un fichier nommé dans une option déclenche une reconstruction.aucune
cflags, ldflagsOptions supplémentaires du compilateur C et de l’éditeur de liens.aucune
defsPropriétés système pour le build de l’image.aucune

Le bloc de premier niveau nativeImage { } accepte les mêmes options mais ne les applique pas ; définissez les options de chaque artefact.

Applications modulaires

Si un JAR de from contient un module-info.class :

  • Les JAR modulaires et le groupe dependencies.maven.modules vont sur --module-path avec --add-modules=ALL-MODULE-PATH ; tout le reste demeure sur le classpath.
  • Le binaire se lance avec --module <module>/<entrypoint>, en utilisant moduleName ou le module contenant le point d’entrée.
  • Un point d’entrée hors de tout module est construit depuis le classpath.

moduleName n’a aucun effet sans JAR modulaires.

Compiler en WebAssembly

Déclarez un artefact WebImage ou passez --tool:wasm-gc / --tool:wasm-lm ; voir WebImage. Pour exécuter du WASM existant, voir WebAssembly. Une image native peut servir d’entrée à une image de conteneur.

Cette page vous a-t-elle aidé ?