انتقل إلى المحتوى

تجميع 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مجموعات المصادر المراد تحزيمها؛ القيمة الفارغة تعني كل المجموعات غير الاختبارية.لا شيء
fromملفات JAR لأعضاء آخرين في مساحة العمل تُفكّ داخل هذا الملف، ويُبنى كلٌّ منها أولًا: 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، 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.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")؛ راجع مساحات العمل.

هل كانت هذه الصفحة مفيدة؟