Перейти к содержимому

Native Image

Компилируйте JVM-приложение в нативный исполняемый файл или разделяемую библиотеку с помощью elide native-image или артефакта проекта Elide либо в WebAssembly.

На этой странице

Native Image заранее компилирует JVM-приложение в автономный исполняемый файл или разделяемую библиотеку.

Компиляция из командной строки

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

Аргументы компилятора указываются после --; elide native-image -- --help выводит их список. Рефлексии, ресурсам, JNI и прокси нужны метаданные достижимости. Для финальной компоновки на хосте нужен инструментарий C.

Артефакт проекта

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" }
    }
  }
}
СвойствоНазначениеПо умолчанию
fromКлючи JAR-артефактов (не пути); пустое значение означает все объявленные JAR или JAR с классами проекта.нет
nameИмя выходного файла.имя проекта
entrypointГлавный класс.jvm.main
moduleNameМодуль запуска для модульных JAR; см. ниже.модуль, содержащий точку входа
type"binary" (исполняемый файл) или "library" (разделяемая библиотека)."binary"
optionsПараметры компилятора; см. ниже.—
dependsOnАртефакты, которые собираются первыми.нет

Результат записывается в .dev/artifacts/native-image/, итоговые аргументы — в native-image.args.

Параметры компилятора

Свойство optionsНазначениеПо умолчанию
optimization"auto", "b" (быстрая сборка), "s", "0" … "4"."auto"
driverMode"embedded" (компилятор Elide) или "external" (native-image из GRAALVM_HOME/JAVA_HOME)."embedded"
verboseПодробный вывод компилятора.false
linkAtBuildTime.enabledКомпоновать всё во время сборки.true
linkAtBuildTime.packagesПакеты, компонуемые во время сборки, когда enabled равно false.нет
classInit.defaultИнициализация классов по умолчанию: "buildtime" или "runtime"."buildtime"
classInit.buildtime, classInit.runtimeКлассы или пакеты, инициализируемые во время сборки или выполнения.нет
exclusions.allКоординаты, исключаемые из обоих путей.собственные JAR компилятора
exclusions.classpath, exclusions.modulepathКоординаты, исключаемые из одного пути.нет
pgo.enabledПрименять профили, если они есть.true
pgo.profilesФайлы профилей.нет
pgo.instrumentСобрать инструментированный образ, записывающий профили.false
pgo.samplingИспользовать сэмплирующие профили.false
pgo.autoprofileФункции автопрофилирования.false
featuresВключаемые классы функций компилятора.нет
flagsДополнительные флаги native-image; изменение файла, указанного во флаге, запускает пересборку.нет
cflags, ldflagsДополнительные флаги компилятора C и компоновщика.нет
defsСистемные свойства для сборки образа.нет

Блок верхнего уровня nativeImage { } принимает те же параметры, но не применяет их; задавайте options каждого артефакта.

Модульные приложения

Если JAR из from содержит module-info.class:

  • Модульные JAR и группа dependencies.maven.modules попадают в --module-path с --add-modules=ALL-MODULE-PATH; всё остальное остаётся в classpath.
  • Бинарный файл запускается с --module <module>/<entrypoint>, используя moduleName или модуль, содержащий точку входа.
  • Точка входа вне модулей собирается из classpath.

Без модульных JAR moduleName ни на что не влияет.

Компиляция в WebAssembly

Объявите артефакт WebImage или передайте --tool:wasm-gc / --tool:wasm-lm; см. WebImage. Чтобы запустить готовый WASM, см. WebAssembly. Нативный образ может быть входными данными для образа контейнера.

Была ли эта страница полезной?