Native Image compila de antemano una aplicación JVM a un ejecutable independiente o a una biblioteca compartida.
Compilar desde la línea de comandos
elide native-image -- -cp app.jar com.example.MainLos argumentos del compilador van después de --; elide native-image -- --help los lista. La reflexión, los
recursos, JNI y los proxies necesitan metadatos de alcanzabilidad. El enlazado final requiere una cadena de
herramientas de C en el host.
Artefacto del proyecto
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" }
}
}
}| Propiedad | Significado | Valor predeterminado |
|---|---|---|
from | Claves de artefactos JAR (no rutas); vacío significa todos los JAR declarados, o un JAR con las clases del proyecto. | ninguno |
name | Nombre del archivo de salida. | el nombre del proyecto |
entrypoint | Clase principal. | jvm.main |
moduleName | Módulo de arranque para JAR modulares; consulte más abajo. | el módulo que contiene el punto de entrada |
type | "binary" (ejecutable) o "library" (biblioteca compartida). | "binary" |
options | Opciones del compilador; consulte más abajo. | — |
dependsOn | Artefactos que se compilan antes. | ninguno |
La salida va a .dev/artifacts/native-image/, con los argumentos finales en native-image.args.
Opciones del compilador
Propiedad de options | Significado | Valor predeterminado |
|---|---|---|
optimization | "auto", "b" (compilación rápida), "s", "0" … "4". | "auto" |
driverMode | "embedded" (el compilador de Elide) o "external" (native-image de GRAALVM_HOME/JAVA_HOME). | "embedded" |
verbose | Salida detallada del compilador. | false |
linkAtBuildTime.enabled | Enlazar todo en tiempo de compilación. | true |
linkAtBuildTime. | Paquetes que se enlazan en tiempo de compilación cuando enabled es false. | ninguno |
classInit.default | Inicialización de clases predeterminada: "buildtime" o "runtime". | "buildtime" |
classInit.buildtime, classInit.runtime | Clases o paquetes que se inicializan en tiempo de compilación o de ejecución. | ninguno |
exclusions.all | Coordenadas que se excluyen de ambas rutas. | los JAR del propio compilador |
exclusions.classpath, exclusions.modulepath | Coordenadas que se excluyen de una sola ruta. | ninguno |
pgo.enabled | Aplicar perfiles si existen. | true |
pgo.profiles | Archivos de perfil. | ninguno |
pgo.instrument | Compilar una imagen instrumentada que registra perfiles. | false |
pgo.sampling | Usar perfiles por muestreo. | false |
pgo.autoprofile | Funciones de perfilado automático. | false |
features | Clases de funciones del compilador que se habilitan. | ninguno |
flags | Opciones adicionales de native-image; un cambio en un archivo nombrado en una opción provoca una recompilación. | ninguno |
cflags, ldflags | Opciones adicionales del compilador de C y del enlazador. | ninguno |
defs | Propiedades del sistema para la compilación de la imagen. | ninguno |
El bloque de nivel superior nativeImage { } acepta las mismas opciones, pero no las aplica; defina las options de
cada artefacto.
Aplicaciones modulares
Si un JAR de from tiene un module-info.class:
- Los JAR modulares y el grupo
dependencies.maven.modulesvan en--module-pathcon--add-modules=ALL-MODULE-PATH; todo lo demás permanece en el classpath. - El binario arranca con
--module <module>/<entrypoint>, usandomoduleNameo el módulo que contiene el punto de entrada. - Un punto de entrada fuera de cualquier módulo se compila desde el classpath.
moduleName no tiene efecto sin JAR modulares.
Compilar a WebAssembly
Declare un artefacto WebImage o pase --tool:wasm-gc / --tool:wasm-lm; consulte WebImage.
Para ejecutar WASM existente, consulte WebAssembly. Una imagen nativa puede ser la entrada de una
imagen de contenedor.