Elide створює й читає JAR-файли безпосередньо за допомогою elide jar і збирає їх як артефакти проєкту.
Створення, перегляд і розпакування
Параметри jar вказуються після --:
elide jar -- --create --file app.jar -C out . # create
elide jar -- --list --file app.jar # list
elide jar -- --extract --file app.jar --dir extracted # extract
elide jar -- --create --file app.jar --main-class com.example.Main -C out . # executable JAR
elide jar -- -helpКомпіляція і створення JAR
elide javac --jar target/app.jar -- src/Main.java src/Util.java
elide javac --jar target/app.jar --manifest src/MANIFEST.MF -- src/Main.javaАртефакти проєкту
amends "elide:project.pkl"
import "elide:Jvm.pkl" as Jvm
artifacts {
["app"] = new Jvm.Jar {
name = "app"
options {
entrypoint = "com.example.Main"
}
}
}elide build записує результат у .dev/artifacts/jar/<name>/. JAR містить класи й ресурси всіх нетестових наборів
вихідних файлів.
Jvm.Jar
| Властивість | Призначення | За замовчуванням |
|---|---|---|
name | Ім’я файлу; "app" і "app.jar" дають app.jar. | ключ артефакту |
sources | Набори вихідних файлів для пакування; порожнє значення означає всі нетестові набори. | немає |
from | JAR інших учасників робочого простору, що розпаковуються в цей; кожен збирається першим: from { project("x") }. Їхні маніфести відкидаються; їхні залежності додаються до експортованого й опублікованого POM цього проєкту. | немає |
resources | Додаткові файли: шляхи або new { from = …; into = … }. | немає |
manifest | Додаткові атрибути META-INF/MANIFEST.MF. | немає |
manifestFile | Файл маніфесту замість згенерованого. | — |
excludes | Записи, які слід пропустити: шаблон з / * ? [ ] — glob шляху; ім’я з крапками — префікс пакета. | немає |
options.entrypoint | Main-Class. | jvm.main |
options.compress | Стискати записи. | true |
options. | Додавати атрибути Implementation-*. | true |
main | Під час пакування не читається; використовуйте options.entrypoint. | — |
dependsOn | Артефакти, які збираються першими. | немає |
artifacts {
["app"] = new Jvm.Jar {
sources { "main" }
excludes {
"com.example.internal" // a package and its subpackages
"**/*.proto" // a path glob
}
manifest {
["Implementation-Vendor"] = "Example"
}
resources {
"LICENSE.txt"
new { from = "config"; into = "META-INF/config" }
}
}
}JAR з вихідним кодом і Javadoc
artifacts {
["sources"] = new Jvm.SourceJar {
classifier = "sources"
excludes { "**/internal/**" }
}
["javadoc"] = new Jvm.JavadocJar {
windowTitle = "Example API"
links { "https://docs.oracle.com/en/java/javase/25/docs/api/" }
groups {
["Core"] { "com.example.core" }
}
}
}Jvm.SourceJar | Призначення |
|---|---|
sources | Набори вихідних файлів для пакування; порожнє значення означає всі нетестові набори. |
classifier | Вставляється перед розширенням (app-sources.jar). |
includes, excludes | Glob-шаблони шляхів для вихідних файлів. |
Jvm.JavadocJar | Призначення |
|---|---|
sources | Набори вихідних файлів для документування; порожнє значення означає всі нетестові набори. |
groups | Групи пакетів: заголовок і список пакетів. |
links | URL зовнішньої документації. |
excludes | Шаблони того, що не документується. |
windowTitle, docTitle | Заголовки вікна й документа. |
generator | "auto" (за замовчуванням): Dokka, якщо серед вихідних файлів є Kotlin, інакше javadoc. "javadoc" або "dokka" вибирає один із них. |
Вихідний код із Kotlin документується за допомогою Dokka замість
javadoc, разом із сусіднім кодом на Java; generator = "javadoc" документує лише файли Java. Dokka працює в окремому
процесі JVM. Elide завантажує його JAR з Maven під час першого збирання Javadoc JAR для Kotlin і кешує їх у локальному
репозиторії Maven, тож першому збиранню потрібен доступ до мережі. Під час кожного збирання Dokka також завантажує
списки пакетів за своїми посиланнями на JDK, стандартну бібліотеку та links; --offline пропускає ці запити. Dokka
читає sources, links і excludes (виключений пакет і його підпакети пропускаються); groups і заголовки
застосовуються лише до javadoc, а Elide попереджає, якщо заголовки задано для Dokka.
Готові до запуску дистрибутиви застосунків
Jvm.JvmApplication — готове до запуску дерево каталогів, як у плагіні application для Gradle: JAR середовища
виконання в lib/, скрипти запуску в bin/ і необов’язкові архіви.
artifacts {
["dist"] = new Jvm.JvmApplication {
from { "app" }
entrypoint = "com.example.Main"
defaultJvmArgs { "-Xmx512m" }
contents {
new { from = "config"; into = "etc" }
}
options {
archives { "zip"; "tar" }
}
}
}| Властивість | Призначення | За замовчуванням |
|---|---|---|
from | JAR-артефакти з кодом застосунку; порожнє значення означає всі оголошені JAR або JAR із класами проєкту. | немає |
name | Ім’я каталогу та скриптів запуску. | ключ артефакту |
entrypoint | Головний клас. | jvm.main |
defaultJvmArgs | Параметри JVM у скриптах, після jvm.flags. | немає |
executableDir | Каталог для скриптів. | "bin" |
contents | Додаткові файли в корені, у тій самій формі, що й ресурси набору вихідних файлів. | немає |
options.unixStartScript, options. | Генерувати відповідний скрипт. | true |
options.archives | "zip" та/або "tar" (gzip). | немає |
dependsOn | Артефакти, які збираються першими. | немає |
| Результат | Шлях |
|---|---|
| Дерево встановлення | . |
| Архіви | . |
elide runзапускає встановлене дерево з параметрами JVM зі скриптів.- Скрипти також читають
JAVA_OPTSі<NAME>_OPTS(sample-app→SAMPLE_APP_OPTS). - POSIX-скрипт іде за символьними посиланнями на себе; у Windows запускайте скрипт напряму або через
PATH. name,version(під час архівування) і кожнеintoмають бути допустимими іменами файлів на всіх платформах: без/,\,:*?"<>|, керувальних символів, крапки чи пробілу в кінці та без імен пристроїв Windows, як-отNUL. Недопустимі імена зупиняють збирання до того, як воно щось запише.
Учасники робочого простору використовують Jvm.Jar сусіднього проєкту через project("core"); див.
Робочі простори.