أداة JAR
يُوفِّر Elide أداة jar مترجمة إلى صورة أصلية — نفس التطبيق الموجود في JDK، لكنه مترجم مسبقاً باستخدام GraalVM. هذا يُزيل عبء بدء تشغيل JVM بالكامل، مما يجعل تجميع JAR شبه فوري حتى في سكريبتات وخطوط أنابيب CI حيث كانت تكلفة البدء البارد لـ JVM ستهيمن على الوقت. يتم الكشف عنه بطريقتين:
- بديل مباشر — يمرر
elide jar -- [OPTION...] الوسائط مباشرة إلى أداة jar المدمجة بدون تكلفة بدء تشغيل 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 | التحقق من اتساق واجهة API عبر الإصدارات في JAR متعدد الإصدارات |
المُعدِّلات الشائعة
| العلَم | الوصف |
|---|---|
-f FILE، —file=FILE | اسم ملف الأرشيف (حذفه لاستخدام stdin/stdout) |
-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 غير وحدوي إلى 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 لـ Javadoc.
التصريح بالقطع الأثرية
يتم التصريح بالقطع الأثرية تحت تعيين 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 لـ Javadoc (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 ويجب أن تظهرا قبل فاصل --. الملفات المصدرية تأتي بعد --.