أداة JAR
يُضمّن Elide أداة JAR مُترجَمة مُسبقاً — نفس تنفيذ أداة jar في JDK، لكنها مُترجَمة مسبقاً باستخدام GraalVM AOT. هذا يُزيل تكلفة تشغيل JVM كلياً، مما يجعل تجميع ملفات JAR شبه فوري حتى في سكريبتات الأتمتة وبيئات CI حيث تكون تكلفة البدء الباردة لـ JVM هي المسيطرة عادةً. وتُكشف بطريقتين:
- بديل مباشر —
elide jar -- [OPTION...] يمرر الوسائط مباشرةً إلى الأداة المدمجة دون أي تكلفة لتشغيل JVM. - تكامل نظام البناء —
elide build يُجمّع ملفات JAR تلقائياً بناءً على تعريفات المخرجات في elide.pkl.
اختصار ثالث — elide javac --jar — يُترجم كود Java ويُعبّئه في ملف JAR في خطوة واحدة.
---
الاستخدام المباشر
elide jar يكشف تنفيذ sun.tools.jar.JarToolProvider المدمج — مُترجَماً بشكل أصلي، فيبدأ فورياً دون الحاجة إلى JVM. جميع الوسائط بعد -- تُمرَّر إلى الأداة الأساسية بالشكل الحرفي، مما يمنحك توافقاً كاملاً مع استدعاءات jar الحالية بجزء بسيط من وقت البدء.
elide jar -- [OPTION...] [ [--release VERSION] [-C dir] files] ...لا توجد خيارات خاصة بـ Elide قبل -- في الوقت الحالي. الفاصل -- لا يزال مطلوباً.
يجب تحديد الملفات والمجلدات كمسارات وليس أسماء مجردة. استخدم ./Foo.class أو ./classes.jar أو مسارات مطلقة مثل /path/to/file. الأسماء المجردة بدون بادئة مسار (مثل Foo.class) ستُنتج خطأً.
العمليات الرئيسية
| الخيار | المختصر | الوصف |
|---|---|---|
—create | -c | إنشاء أرشيف |
—extract | -x | استخراج ملفات من الأرشيف |
—list | -t | عرض جدول محتويات الأرشيف |
—update | -u | تحديث أرشيف موجود |
—describe-module | -d | طباعة واصف الوحدة أو اسم الوحدة التلقائي |
—validate | التحقق من اتساق واجهة برمجة التطبيقات في ملفات JAR متعددة الإصدارات |
المُعدِّلات الشائعة
| الخيار | الوصف |
|---|---|
-f FILE، —file=FILE | اسم ملف الأرشيف (إذا حُذف يُستخدم المدخل/المخرج القياسي) |
-C DIR . | الانتقال إلى المجلد المحدد وتضمين جميع ملفاته |
-m FILE، —manifest=FILE | تضمين ملف البيان من الملف المحدد |
-M، —no-manifest | عدم إنشاء ملف بيان |
-e CLASS، —main-class=CLASS | نقطة دخول التطبيق لملفات JAR القابلة للتنفيذ |
—release VERSION | وضع الملفات التالية تحت META-INF/versions/VERSION/ |
—module-version=VERSION | تعيين إصدار الوحدة |
—module-path | موقع تبعيات الوحدة لحساب التجزئة |
—hash-modules=PATTERN | حساب وتسجيل تجزئات الوحدات المطابقة |
-0، —no-compress | التخزين فقط دون ضغط ZIP |
—date=TIMESTAMP | طابع زمني بتنسيق ISO-8601 لبيانات المدخلات |
-k، —keep-old-files | عدم استبدال الملفات الموجودة عند الاستخراج |
—dir | المجلد الهدف للاستخراج |
-v، —verbose | إخراج تفصيلي |
أمثلة
إنشاء أرشيف من ملفي فئة:
elide jar -- --create --file ./classes.jar ./Foo.class ./Bar.classإنشاء أرشيف من مجلد مع ملف بيان مخصص:
elide jar -- --create --file ./classes.jar --manifest ./mymanifest -C ./foo/ .إنشاء ملف JAR وحداتي قابل للتنفيذ:
elide jar -- --create --file ./app.jar --main-class com.example.Main --module-version 1.0 \
-C ./build/classes .تحديث ملف JAR غير وحداتي إلى وحداتي:
elide jar -- --update --file ./app.jar --main-class com.example.Main --module-version 1.0 \
-C ./build/classes module-info.classإنشاء ملف JAR متعدد الإصدارات:
elide jar -- --create --file ./mr.jar -C ./foo classes --release 9 -C ./foo9 classesعرض محتويات ملف JAR:
elide jar -- --list --file ./app.jarاستخراج ملف JAR إلى مجلد:
elide jar -- --extract --file ./app.jar --dir ./extracted---
التكامل مع نظام البناء
عند استخدام elide build مع ملف مشروع elide.pkl، يتم التعامل مع تعبئة ملفات JAR تلقائياً من خلال رسم بياني لمهام البناء. ثلاثة أنواع من المخرجات مدعومة: ملفات JAR للفئات، وملفات JAR للمصادر، وملفات JAR للوثائق.
الإعلان عن المخرجات
تُعرَّف المخرجات تحت تعيين artifacts في elide.pkl. استورد elide:Jvm.pkl للوصول إلى أنواع JAR:
amends "elide:project.pkl"
import "elide:Jvm.pkl" as Jvm
import "elide:Sources.pkl" as Src
name = "my-library"
sources {
["main"] = new Src.SourceSetSpec {
paths {
"src/main/java<<>>*.java"
}
}
}
artifacts {
["app"] = new Jvm.Jar {
name = "my-library"
sources { "main" }
}
["sources"] = new Jvm.SourceJar {
from { "main" }
}
["docs"] = new Jvm.JavadocJar {
from { "main" }
}
}ملف JAR للفئات (Jvm.Jar)
يُعبّئ ملفات .class المُترجَمة من مهام الترجمة السابقة، إلى جانب أي موارد مُعلَن عنها، في ملف JAR واحد. يُنشأ ملف البيان تلقائياً ويتضمن Manifest-Version وCreated-By وImplementation-Title وImplementation-Version وMain-Class (إذا كانت نقطة الدخول محددة).
artifacts/jar/{name}/{name}.jar
الخيارات:
| الحقل | النوع | الافتراضي | الوصف |
|---|---|---|---|
name | String? | مفتاح المخرج | اسم ملف JAR الناتج (بدون .jar) |
sources | Listing<String> | { "main" } | مجموعات المصادر التي تُضمَّن فئاتها المُترجَمة |
resources | Mapping<path, path> | فارغ | ملفات الموارد المُضمَّنة في JAR |
manifest | Mapping<String, String> | فارغ | إدخالات إضافية لملف البيان |
manifestFile | String? | لا شيء | مسار ملف بيان مخصص |
excludes | Listing<String> | فارغ | أنماط glob للملفات المستثناة |
options.compress | Boolean | true | تطبيق ضغط ZIP |
options.defaultManifestProperties | Boolean | true | إضافة إدخالات البيان القياسية |
options.entrypoint | String? | لا شيء | الفئة الرئيسية لملف JAR القابل للتنفيذ |
artifacts {
["app"] = new Jvm.Jar {
name = "my-app"
sources { "main" }
options {
entrypoint = "com.example.Main"
}
}
}artifacts {
["app"] = new Jvm.Jar {
name = "my-library"
sources { "main" }
manifest {
["Implementation-Vendor"] = "Acme Corp"
["Bundle-SymbolicName"] = "com.example.my-library"
}
}
}artifacts {
["app"] = new Jvm.Jar {
name = "my-app"
sources { "main" }
resources {
["/config/defaults.properties"] = "src/main/resources/defaults.properties"
}
}
}ملف JAR للمصادر (Jvm.SourceJar)
يُعبّئ ملفات المصادر من مجموعات المصادر المُعلَن عنها في ملف JAR بمُصنِّف -sources. يُستخدم عادةً لدعم بيئات التطوير المتكاملة ونشر Maven.
artifacts/jar/{name}/{name}-sources.jar
| الحقل | النوع | الافتراضي | الوصف |
|---|---|---|---|
from | Listing<String> | فارغ | مجموعات المصادر المُراد تعبئتها |
classifier | String? | "sources" | مُصنِّف مخصص لاسم الملف الناتج |
excludes | Listing<String> | فارغ | أنماط glob للملفات المستثناة |
includes | Listing<String> | فارغ | أنماط glob للملفات المُضمَّنة |
artifacts {
["sources"] = new Jvm.SourceJar {
from { "main" }
excludes { "**/*.generated.java" }
}
}ملف JAR للوثائق (Jvm.JavadocJar)
يُشغّل أداة javadoc على ملفات مصادر Java ويُعبّئ وثائق HTML الناتجة في ملف JAR بمُصنِّف -javadoc.
artifacts/jar/{name}/{name}-javadoc.jar
| الحقل | النوع | الافتراضي | الوصف |
|---|---|---|---|
from | Listing<String> | فارغ | مجموعات المصادر التي تحتوي على ملفات Java للتوثيق |
links | Listing<String> | فارغ | روابط لوثائق خارجية |
excludes | Listing<String> | فارغ | أنماط الحزم المستثناة من التوثيق |
windowTitle | String? | "{name} API" | عنوان نافذة المتصفح |
docTitle | String? | "{name} API Documentation" | عنوان صفحة الوثائق |
groups | Mapping<String, Listing<String>> | فارغ | تجميعات الحزم (العنوان ← الحزم) |
artifacts {
["docs"] = new Jvm.JavadocJar {
from { "main" }
windowTitle = "My Library API"
links {
"https:<<>>
}
excludes { " com.example.internal" }
}
}---
الترجمة والتعبئة في خطوة واحدة
تقبل elide javac علامة --jar التي تُترجم مصادر Java وتُعبّئ الفئات المُترجَمة فوراً في ملف JAR، دون الحاجة إلى استدعاء elide jar منفصل.
elide javac --jar < output.jar> [--manifest < manifest-file>] -- <source files...>يذهب مخرج الترجمة إلى target/ في مجلد العمل الحالي، ثم يُجمَّع ملف 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--jar و--manifest خيارات خاصة بـ Elide ويجب أن تظهر قبل الفاصل --. تأتي ملفات المصادر بعد --.