Saltar al contenido

Native Image

Compile una aplicación JVM a un ejecutable nativo o una biblioteca compartida con elide native-image o un artefacto de proyecto de Elide, o compílela a WebAssembly.

En esta página

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.Main

Los 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" }
    }
  }
}
PropiedadSignificadoValor predeterminado
fromClaves de artefactos JAR (no rutas); vacío significa todos los JAR declarados, o un JAR con las clases del proyecto.ninguno
nameNombre del archivo de salida.el nombre del proyecto
entrypointClase principal.jvm.main
moduleNameMó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"
optionsOpciones del compilador; consulte más abajo.—
dependsOnArtefactos 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 optionsSignificadoValor 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"
verboseSalida detallada del compilador.false
linkAtBuildTime.enabledEnlazar todo en tiempo de compilación.true
linkAtBuildTime.packagesPaquetes que se enlazan en tiempo de compilación cuando enabled es false.ninguno
classInit.defaultInicialización de clases predeterminada: "buildtime" o "runtime"."buildtime"
classInit.buildtime, classInit.runtimeClases o paquetes que se inicializan en tiempo de compilación o de ejecución.ninguno
exclusions.allCoordenadas que se excluyen de ambas rutas.los JAR del propio compilador
exclusions.classpath, exclusions.modulepathCoordenadas que se excluyen de una sola ruta.ninguno
pgo.enabledAplicar perfiles si existen.true
pgo.profilesArchivos de perfil.ninguno
pgo.instrumentCompilar una imagen instrumentada que registra perfiles.false
pgo.samplingUsar perfiles por muestreo.false
pgo.autoprofileFunciones de perfilado automático.false
featuresClases de funciones del compilador que se habilitan.ninguno
flagsOpciones adicionales de native-image; un cambio en un archivo nombrado en una opción provoca una recompilación.ninguno
cflags, ldflagsOpciones adicionales del compilador de C y del enlazador.ninguno
defsPropiedades 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.modules van en --module-path con --add-modules=ALL-MODULE-PATH; todo lo demás permanece en el classpath.
  • El binario arranca con --module <module>/<entrypoint>, usando moduleName o 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.

¿Te resultó útil esta página?