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. | Пакети, що компонуються під час збирання, коли 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. Нативний образ може бути вхідними даними для
образу контейнера.