ينشئ 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 في أول مرة يُبنى فيها ملف 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")؛ راجع
مساحات العمل.