Перейти до вмісту

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. Нативний образ може бути вхідними даними для образу контейнера.

Чи була ця сторінка корисною?