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

Збирання JAR

Створюйте, переглядайте й розпаковуйте JAR за допомогою elide jar, збирайте JAR, JAR з вихідним кодом і Javadoc, а також готові до запуску дистрибутиви застосунків у проєкті Elide.

На цій сторінці

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Набори вихідних файлів для пакування; порожнє значення означає всі нетестові набори.немає
fromJAR інших учасників робочого простору, що розпаковуються в цей; кожен збирається першим: from { project("x") }. Їхні маніфести відкидаються; їхні залежності додаються до експортованого й опублікованого POM цього проєкту.немає
resourcesДодаткові файли: шляхи або new { from = …; into = … }.немає
manifestДодаткові атрибути META-INF/MANIFEST.MF.немає
manifestFileФайл маніфесту замість згенерованого.—
excludesЗаписи, які слід пропустити: шаблон з / * ? [ ] — glob шляху; ім’я з крапками — префікс пакета.немає
options.entrypointMain-Class.jvm.main
options.compressСтискати записи.true
options.defaultManifestPropertiesДодавати атрибути 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, excludesGlob-шаблони шляхів для вихідних файлів.
Jvm.JavadocJarПризначення
sourcesНабори вихідних файлів для документування; порожнє значення означає всі нетестові набори.
groupsГрупи пакетів: заголовок і список пакетів.
linksURL зовнішньої документації.
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" }
    }
  }
}
ВластивістьПризначенняЗа замовчуванням
fromJAR-артефакти з кодом застосунку; порожнє значення означає всі оголошені JAR або JAR із класами проєкту.немає
nameІм’я каталогу та скриптів запуску.ключ артефакту
entrypointГоловний клас.jvm.main
defaultJvmArgsПараметри JVM у скриптах, після jvm.flags.немає
executableDirКаталог для скриптів."bin"
contentsДодаткові файли в корені, у тій самій формі, що й ресурси набору вихідних файлів.немає
options.unixStartScript, options.windowsStartScriptГенерувати відповідний скрипт.true
options.archives"zip" та/або "tar" (gzip).немає
dependsOnАртефакти, які збираються першими.немає
РезультатШлях
Дерево встановлення.dev/artifacts/install/<name>/
Архіви.dev/artifacts/distributions/
  • elide run запускає встановлене дерево з параметрами JVM зі скриптів.
  • Скрипти також читають JAVA_OPTS і <NAME>_OPTS (sample-app → SAMPLE_APP_OPTS).
  • POSIX-скрипт іде за символьними посиланнями на себе; у Windows запускайте скрипт напряму або через PATH.
  • name, version (під час архівування) і кожне into мають бути допустимими іменами файлів на всіх платформах: без /, \, :*?"<>|, керувальних символів, крапки чи пробілу в кінці та без імен пристроїв Windows, як-от NUL. Недопустимі імена зупиняють збирання до того, як воно щось запише.

Учасники робочого простору використовують Jvm.Jar сусіднього проєкту через project("core"); див. Робочі простори.

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