الترحيل إلى الوحدات
الوحدات التلقائية وغير المسماة
الترحيل إلى الوحدات درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.
تحويل الشفرة الموجودة إلى وحدات
نادراً ما تعتمد المشاريع الوحدات منذ اليوم الأول. صُمم JPMS لدعم الترحيل التدريجي، بما يتيح لمسار الأصناف ومسار الوحدات التعايش.
العنصران الأساسيان هما الوحدات التلقائية والوحدة غير المسماة.
الوحدة غير المسماة
كل ما يُحمّل من مسار الأصناف يعيش في الوحدة غير المسماة الوحيدة. وهي تقرأ كل الوحدات الأخرى وتصدّر جميع حزمها.
وهذا هو الجسر الذي يُبقي شفرة مسار الأصناف القديمة عاملة.
لا يمكن للوحدة المسماة القراءة من غير المسماة
هناك قاعدة مهمة: لا يمكن لوحدة مسماة صريحة أن تعتمد على الوحدة غير المسماة. ولا يمكنك كتابة requires لشفرة موجودة في مسار الأصناف.
لذلك تُجري الترحيل من الأسفل إلى الأعلى: حوّل تمثيل تبعياتك أولًا.
الوحدات التلقائية
ضع ملف JAR عاديًا (غير معياري) في مسار الوحدات، فيصبح وحدة تلقائية. ويحصل على اسم مشتق تلقائيًا، ويقرأ جميع الوحدات الأخرى، ويصدّر جميع حزمها.
يتيح ذلك للوحدات المسماة استخدام requires مع ملف JAR لا يحتوي بعد على module-info.
مصدر الاسم
يُشتق اسم الوحدة التلقائية وفق ترتيب الأفضلية التالي:
- الإدخال
Automatic-Module-Nameفي بيان JAR، إن وُجد - وإلا فمن اسم ملف JAR، بعد إزالة الإصدار وتحويل الشرطات إلى نقاط
أهمية الأسماء المستقرة
ينبغي لمؤلفي المكتبات إضافة Automatic-Module-Name إلى البيان قبل تحويل المكتبة بالكامل إلى وحدات. فهذا يضمن اسم وحدة مستقرًا، بحيث تبقى عبارات requires في المشاريع التابعة صالحة عند إضافة module-info الحقيقي لاحقًا.
Automatic-Module-Name: com.example.jsonاستراتيجية من الأعلى إلى الأسفل
النهج الموصى به لتطبيقك الخاص:
- أبقِ التبعيات كوحدات تلقائية في مسار الوحدات
- أضف
module-info.javaإلى وحدتك العليا أولًا - أعلن
requiresباستخدام أسماء تلك الوحدات التلقائية
خطوة ترحيل نموذجية
لنفترض أن guava-32.jar موجود في مسار الوحدات بوصفه الوحدة التلقائية com.google.common. يمكن لوحدة تطبيقك أن تعتمد عليه بالفعل.
module com.example.app {
requires com.google.common;
exports com.example.app.api;
}مشكلة الحزم المنقسمة
يمنع نظام الوحدات احتواء وحدتين على الحزمة نفسها. وتتسبب المكتبات القديمة التي تقسّم حزمة بين ملفات JAR في حدوث أخطاء.
يمكنك إصلاح ذلك بدمج ملفات JAR، أو باستخدام --patch-module، أو بالترقية إلى إصدارات تعالج الانقسام.
مشكلات الوصول عبر الانعكاس
قد تفشل أُطر العمل التي تجري انعكاسًا عميقًا مع InaccessibleObjectException بعد تحويل التطبيق إلى وحدات. أضف توجيهات opens أو استخدم، كجسر مؤقت، خيار التشغيل --add-opens.
أداة jdeps المفيدة
تحلل أداة jdeps ملفات JAR الخاصة بك، وتُبلغ عن التبعيات، وتحدد استخدام واجهات برمجة التطبيقات الداخلية لـ JDK، بل ويمكنها أيضًا إنشاء module-info.java مقترح باستخدام jdeps --generate-module-info.
شغّلها أولًا للتخطيط لعملية الترحيل.
تحقق سريع
تذكّر كيف يحصل ملف JAR عادي على هوية وحدة.
مراجعة
تعلّمت تقنيات الترحيل:
- تعيش شفرة مسار الأصناف في الوحدة غير المسماة؛ ولا يمكن للوحدات المسماة استخدام
requiresمعها - تصبح ملفات JAR العادية في مسار الوحدات وحدات تلقائية
- اضبط
Automatic-Module-Nameللحصول على أسماء مستقرة - انتبه إلى الحزم المنقسمة والوصول عبر الانعكاس؛ واستخدم
jdepsللتخطيط
بهذا يكتمل مقرر JPMS.
الأسئلة الشائعة
هل درس «الترحيل إلى الوحدات» مجاني؟
نعم — نص درس «الترحيل إلى الوحدات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.
ماذا ستتعلم في «الترحيل إلى الوحدات»؟
الوحدات التلقائية وغير المسماة تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «الترحيل إلى الوحدات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- module-info.java
- requires وexports
- الخدمات مع provides/uses
- الترحيل إلى الوحدات