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.MainLes 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é | Signification | Valeur par défaut |
|---|---|---|
from | Clés d’artefacts JAR (pas des chemins) ; vide signifie tous les JAR déclarés, ou un JAR des classes du projet. | aucune |
name | Nom du fichier de sortie. | le nom du projet |
entrypoint | Classe principale. | jvm.main |
moduleName | Module 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" |
options | Options du compilateur ; voir ci-dessous. | — |
dependsOn | Artefacts à 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 options | Signification | Valeur 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" |
verbose | Sortie détaillée du compilateur. | false |
linkAtBuildTime.enabled | Tout lier au moment du build. | true |
linkAtBuildTime. | Paquets à lier au moment du build quand enabled vaut false. | aucun |
classInit.default | Initialisation des classes par défaut : "buildtime" ou "runtime". | "buildtime" |
classInit.buildtime, classInit.runtime | Classes ou paquets initialisés au moment du build ou de l’exécution. | aucun |
exclusions.all | Coordonnées exclues des deux chemins. | les JAR du compilateur lui-même |
exclusions.classpath, exclusions.modulepath | Coordonnées exclues d’un seul chemin. | aucune |
pgo.enabled | Appliquer les profils s’ils existent. | true |
pgo.profiles | Fichiers de profil. | aucun |
pgo.instrument | Construire une image instrumentée qui enregistre des profils. | false |
pgo.sampling | Utiliser des profils par échantillonnage. | false |
pgo.autoprofile | Fonctionnalités de profilage automatique. | false |
features | Classes de fonctionnalités du compilateur à activer. | aucune |
flags | Options native-image supplémentaires ; la modification d’un fichier nommé dans une option déclenche une reconstruction. | aucune |
cflags, ldflags | Options supplémentaires du compilateur C et de l’éditeur de liens. | aucune |
defs | Proprié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.modulesvont sur--module-pathavec--add-modules=ALL-MODULE-PATH; tout le reste demeure sur le classpath. - Le binaire se lance avec
--module <module>/<entrypoint>, en utilisantmoduleNameou 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.