نظام وحدات منصة جافا
يُحدد نظام وحدات منصة جافا ( JPMS ) تنسيق توزيع لمجموعات من أكواد جافا والموارد المرتبطة بها. [ 1 ] كما يُحدد مستودعًا لتخزين هذه المجموعات، أو الوحدات ، ويُبين كيفية اكتشافها وتحميلها والتحقق من سلامتها. ويتضمن ميزات مثل مساحات الأسماء بهدف معالجة بعض أوجه القصور في تنسيق JAR الحالي ، وخاصةً مشكلة "جحيم JAR " التي قد تؤدي إلى مشاكل مثل مسار الفئات وتحميل الفئات.
كان نظام وحدات جافا قيد التطوير في البداية في إطار عملية مجتمع جافا باسم JSR 277 وكان من المقرر إصداره مع جافا 7.
تم تعليق JSR 277 لاحقًا وتم إنشاء مشروع Jigsaw [ 2 ] لتقسيم JDK إلى وحدات. وقد تم استبدال JSR 376 (نظام وحدات منصة جافا) بهذا JSR.
كان مشروع Jigsaw مخصصًا في الأصل لإصدار Java 7 (2011)، ولكن تم تأجيله إلى Java 8 (2014) كجزء من الخطة البديلة، [ 3 ] ثم تم تأجيله مرة أخرى إلى إصدار Java 9 في عام 2017. [ 4 ] تم إصدار Java 9، بما في ذلك نظام وحدات Java، في 21 سبتمبر 2017. [ 5 ] [ 6 ]
بنيان
يتضمن نظام وحدات جافا المطبق في جافا 9 ما يلي من JEPs و JSR (طلب مواصفات جافا) : [ 2 ]
- JEP 200: JDK المعياري: تحديد بنية معيارية لـ JDK
- JEP 201: شفرة المصدر المعيارية: إعادة تنظيم شفرة مصدر JDK إلى وحدات، وتحسين نظام البناء لتجميع الوحدات، وفرض حدود الوحدات أثناء عملية البناء.
- JEP 220: صور وقت التشغيل المعيارية: إعادة هيكلة صور وقت التشغيل JDK وJRE لاستيعاب الوحدات النمطية وتحسين الأداء والأمان وسهولة الصيانة
- JEP 261: نظام الوحدات: تطبيق نظام الوحدات لمنصة جافا
- JEP 282: رابط جافا: إنشاء أداة يمكنها تجميع وتحسين مجموعة من الوحدات النمطية وتوابعها في صورة وقت تشغيل مخصصة [ 7 ]
- JSR 376: نظام وحدات منصة جافا [ 8 ]
بالإضافة إلى ذلك، تمت إضافة العديد من ميزات JDK 9 الأخرى لتسهيل الانتقال إلى نظام الوحدات النمطية:
- JEP 238: ملفات JAR متعددة الإصدارات: توسيع تنسيق ملف JAR للسماح بوجود إصدارات متعددة خاصة بإصدارات Java من ملفات الفئات في أرشيف واحد. [ 9 ]
- JEP 253: إعداد عناصر تحكم واجهة المستخدم JavaFX وواجهات برمجة تطبيقات CSS للنمطية: تحديد واجهات برمجة تطبيقات عامة لوظائف JavaFX التي لا تتوفر حاليًا إلا عبر واجهات برمجة التطبيقات الداخلية والتي ستصبح غير متاحة بسبب النمطية. [ 10 ]
- JEP 260: تغليف معظم واجهات برمجة التطبيقات الداخلية: جعل معظم واجهات برمجة التطبيقات الداخلية لـ JDK غير متاحة افتراضيًا، مع إبقاء عدد قليل من واجهات برمجة التطبيقات الداخلية الهامة واسعة الاستخدام متاحة، إلى حين وجود بدائل مدعومة لجميع وظائفها أو معظمها. [ 11 ]
- JEP 275: تغليف تطبيقات جافا المعيارية: سيتطور برنامج تغليف جافا في JDK 9، مما يجعله على دراية بالوحدات، مما يسمح على سبيل المثال بتغليف وحدة وجميع الوحدات التي تعتمد عليها. [ 12 ]
خصائص الوحدات
تُستخدم الوحدات النمطية لتجميع الحزم والتحكم بدقة في الحزم التي تنتمي إلى واجهة برمجة التطبيقات العامة. على عكس ملفات JAR ، تُعلن الوحدات النمطية صراحةً عن الوحدات النمطية التي تعتمد عليها، والحزم التي تُصدّرها. [ 13 ] تُحسّن إعلانات التبعية الصريحة سلامة الكود، من خلال تسهيل فهم التطبيقات الكبيرة والتبعيات بين مكونات البرمجيات.
يُوضع تعريف الوحدة في ملف باسم module-info.java في جذر تسلسل ملفات مصدر الوحدة. ويتحقق JDK من التبعيات والتفاعلات بين الوحدات أثناء الترجمة والتشغيل.
على سبيل المثال، يُعلن تعريف الوحدة التالي أن الوحدة org.wikipedia.barتعتمد على org.wikipedia.bazوحدة أخرى، وتُصدّر الحزم التالية: org.wikipedia.bar.alphaو org.wikipedia.bar.beta:
الوحدة org.wikipedia.bar { تتطلب org.wikipedia.baz؛ تصدير org.wikipedia.bar.alpha؛ تصدير org.wikipedia.bar.beta؛ }ستكون العناصر العامة في org.wikipedia.bar.alphaالحزم متاحة للوحدات التابعة. أما العناصر الخاصة فلا يمكن الوصول إليها حتى باستخدام وسائل مثل الانعكاس . تجدر الإشارة إلى أنه في إصدارات جافا من 9 إلى 16، يعتمد السماح الفعلي بهذا "الوصول غير المصرح به" على إعدادات سطر الأوامر. [ 14 ]org.wikipedia.bar.beta
تم تقسيم JDK نفسه إلى وحدات نمطية في Java 9. [ 15 ] على سبيل المثال، يتم تصدير غالبية مكتبة Java القياسية بواسطة الوحدة النمطية java.base.
ابتداءً من Java 25، أصبح بالإمكان استيراد الوحدات النمطية نفسها، مما يؤدي إلى استيراد جميع الحزم المصدرة تلقائيًا. [ 16 ] يتم ذلك باستخدام import module. على سبيل المثال، يُعادل .importmodulejava.sql;
استيراد java.sql.* ؛ استيراد javax.sql.* ؛ // الصادرات غير المباشرة المتبقية من java.logging و java.transaction.xa و java.xmlوبالمثل ، يستورد جميع الحزم الـ 54 التابعة لـ .importmodulejava.base;java.base
package org.wikipedia.examples ;استيراد الوحدة النمطية java.base ؛/** * يسمح لنا استيراد الوحدة java.base بتجنب استيراد معظم الفئات يدويًا * يتم استخدام الفئات التالية (خارج java.lang): * - java.text.MessageFormat * - java.util.Date * - java.util.List * - java.util.concurrent.ThreadLocalRandom */ public class Example { public static void main ( String [] args ) { List < String > colors = List . of ( "Red" , "Orange" , "Yellow" , "Green" , "Blue" , "Indigo" , "Violet" ); IO . println ( MessageFormat . format ( "My favorite colour is {0} and today is {1,date,long}" , colors . get ( ThreadLocalRandom . current (). nextInt ( colors . size ())), new Date () )); } }تستخدم الوحدات النمطية الكلمات المفتاحية التالية :
exports: يُستخدم في تعريف الوحدة النمطية لتحديد الحزم المتاحة للوحدات النمطية الأخرىmodule: يُعلن عن وحدة نمطيةopenيشير هذا إلى أن جميع الفئات في الحزمة يمكن الوصول إليها عبر الانعكاس بواسطة وحدات أخرىopens: تُستخدم لفتح حزمة معينة لعرضها على وحدات أخرىprovides: يُستخدم للإعلان عن أن الوحدة النمطية توفر تطبيقًا لواجهة خدمةrequires: يُستخدم في تعريف الوحدة النمطية لتحديد أن الوحدة النمطية تعتمد على وحدة نمطية أخرىto: يُستخدم معopensالتوجيه لتحديد الوحدة النمطية المسموح لها بالوصول إلى الحزمة بشكل انعكاسيtransitiveيُستخدم هذا معrequiresالتوجيه للإشارة إلى أن وحدةً ما لا تتطلب وحدةً أخرى فحسب، بل تُتيح أيضًا تبعيات تلك الوحدة للوحدات التي تعتمد عليها.uses: يستخدم في وحدة نمطية للإعلان عن أن الوحدة النمطية تستخدم خدمة (أي أنها ستستهلك خدمة مقدمة من وحدات نمطية أخرى)with: يُستخدم معprovidesالتوجيه لتحديد أي تطبيق للخدمة يتم توفيره بواسطة الوحدة
الوحدات النمطية القياسية
الوحدات الأساسية
تنتمي الوحدات النمطية الموجودة ضمن مساحة الاسم java.*إلى منصة Java، الإصدار القياسي ، jdk.*وتنتمي الوحدات النمطية الموجودة ضمن مساحة الاسم إلى مجموعة أدوات تطوير Java . [ 17 ]
| اسم | وصف |
|---|---|
java.base | يحدد هذا القسم واجهات برمجة التطبيقات الأساسية التي تشكل أساس منصة Java SE. مطلوب ضمنيًا من قبل جميع الوحدات ولا يحتاج إلى تعريف |
java.compiler | يحدد واجهات برمجة التطبيقات المتعلقة بنموذج اللغة، ومعالجة التعليقات التوضيحية في جافا ، ومترجم جافا . |
java.datatransfer | يحدد واجهات برمجة التطبيقات التي تسهل نقل البيانات بين التطبيقات أو داخل تطبيق واحد. |
java.desktop | يحدد هذا البرنامج مجموعة أدوات النوافذ المجردة (AWT) ومكتبات Swing لواجهات المستخدم، بالإضافة إلى واجهات برمجة التطبيقات (APIs) لإمكانية الوصول والصوت والتصوير والطباعة و JavaBeans . |
java.instrument | يحدد الخدمات التي تسمح بتجهيز البرامج التي تعمل على آلة جافا الافتراضية (JVM). |
java.logging | يحدد واجهة برمجة التطبيقات لتسجيل الأحداث في تطبيقات جافا (واجهة برمجة تطبيقات تسجيل جافا). |
java.management | يحدد واجهات برمجة التطبيقات لإطار عمل Java Management Extensions (JMX). |
java.management.rmi | يحدد موصل استدعاء الأساليب عن بعد (RMI) لواجهة برمجة التطبيقات عن بعد لملحقات إدارة جافا (JMX). |
java.naming | يحدد واجهة برمجة التطبيقات (API) لخدمات Java Naming and Directory Interface (JNDI). |
java.net.http | يحدد واجهة برمجة التطبيقات (API) لعميل HTTP ووظائف WebSocket . |
java.prefs | يحدد واجهة برمجة التطبيقات لإدارة وتخزين تفضيلات المستخدم. |
java.rmi | يحدد واجهة برمجة تطبيقات استدعاء الأساليب عن بعد (RMI) للاتصال بالكائنات عبر الآلات الافتراضية لجافا. |
java.scripting | يحدد واجهة برمجة التطبيقات (API) لدمج محركات البرمجة النصية في تطبيقات جافا (واجهة برمجة تطبيقات البرمجة النصية). |
java.se | يحدد واجهة برمجة التطبيقات القياسية لمنصة Java SE. |
java.security.jgss | يحدد ربط Java لواجهة برمجة تطبيقات خدمات الأمان العامة IETF (GSS-API) لسياقات الأمان. |
java.security.sasl | يحدد دعم جافا لبروتوكول طبقة المصادقة والأمان البسيطة (SASL). |
java.smartcardio | يحدد واجهة برمجة التطبيقات للتفاعل مع أجهزة البطاقات الذكية (واجهة برمجة تطبيقات إدخال/إخراج البطاقات الذكية في جافا). |
java.sql | يحدد واجهة برمجة تطبيقات Java Database Connectivity (JDBC) للتفاعل مع قواعد البيانات. |
java.sql.rowset | يحدد واجهة برمجة تطبيقات JDBC RowSet لإدارة البيانات الجدولية والتفاعل معها في Java. |
java.transaction.xa | يُعرّف واجهة برمجة تطبيقات لإدارة المعاملات الموزعة داخل JDBC. |
java.xml | يحدد واجهة برمجة تطبيقات جافا لمعالجة XML (JAXP)، بما في ذلك أدوات تحليل وتحويل بيانات XML. |
java.xml.crypto | يحدد واجهة برمجة التطبيقات (API) للعمليات التشفيرية مع بيانات XML. |
jdk.accessibility | يُعرّف فئات الأدوات المساعدة لتنفيذ التقنيات المساعدة في JDK. |
jdk.attach | يحدد واجهة برمجة التطبيقات (API) الخاصة بالاتصال والتفاعل مع مثيل JVM قيد التشغيل (واجهة برمجة التطبيقات الخاصة بالاتصال). |
jdk.charsets | يوفر مجموعات أحرف إضافية ( charset s)، بما في ذلك مجموعات الأحرف ثنائية البايت ومجموعات الأحرف الخاصة بشركة IBM، غير المدرجة في .java.base |
jdk.compiler | يحدد التنفيذ الداخلي لمترجم جافا وأداة سطر الأوامر javac . |
jdk.crypto.cryptoki | يحدد هذا القسم كيفية تنفيذ موفر الأمان SunPKCS11 للعمليات التشفيرية. |
jdk.dynalink | يحدد واجهة برمجة التطبيقات (API) لربط العمليات عالية المستوى على الكائنات بشكل ديناميكي. |
jdk.editpad | ينفذ خدمة لوحة التحرير المستخدمة jdk.jshellلتقييم التعليمات البرمجية. |
jdk.hotspot.agent | يوفر هذا البرنامج آلية تنفيذ وكيل خدمة نقاط الاتصال الساخنة . |
jdk.httpserver | يحدد واجهة برمجة تطبيقات خادم HTTP الخاصة بـ JDK وأداة jwebserver لتشغيل خادم HTTP بسيط. |
jdk.incubator.vector | يحدد واجهة برمجة التطبيقات للتعبير عن العمليات الحسابية التي يمكن تجميعها في تعليمات SIMD في وقت التشغيل، مثل تعليمات AVX أو NEON. |
jdk.jartool | يوفر أدوات لمعالجة ملفات Java Archive (JAR)، مثل أوامر jar و jarsigner . |
jdk.javadoc | يحدد هذا الملف تنفيذ أداة توثيق النظام وإصدار سطر الأوامر الخاص بها، javadoc . |
jdk.jcmd | يحدد أدوات تشخيص واستكشاف أخطاء عمليات JVM وإصلاحها، بما في ذلك jcmd و jps و jstat . |
jdk.jconsole | يحدد هذا البرنامج أداة jconsole الرسومية القائمة على JMX لمراقبة وإدارة تطبيقات Java. |
jdk.jdeps | يحدد أدوات لتحليل التبعيات في برامج ومكتبات جافا، مثل jdeps و javap و jdeprscan و jnativescan . |
jdk.jdi | يحدد واجهة تصحيح أخطاء جافا (JDI) لتصحيح أخطاء تطبيقات جافا. |
jdk.jdwp.agent | يوفر تطبيقًا لوكيل بروتوكول تصحيح الأخطاء السلكية في جافا (JDWP) لتصحيح الأخطاء عن بعد. |
jdk.jfr | يحدد واجهة برمجة التطبيقات (API) لبرنامج JDK Flight Recorder (JFR) لجمع بيانات الأداء والتشخيص. |
jdk.jlink | يحدد أداة jlink لإنشاء صور وقت التشغيل المخصصة، وأدوات jmod و jimage لإدارة ملفات JMOD و JDK للحاويات. |
jdk.jpackage | يحدد أداة تجميع Java ( jpackage ) لإنشاء حزم تطبيقات خاصة بالمنصة. |
jdk.jshell | يوفر أداة jshell لتقييم مقتطفات كود Java بشكل تفاعلي. |
jdk.jsobject | يحدد واجهة برمجة التطبيقات (API) لدمج كائنات جافا سكريبت في تطبيقات جافا. |
jdk.jstatd | يُعرّف أداة jstatd لمراقبة إحصائيات JVM عن بُعد. |
jdk.localedata | يوفر بيانات خاصة بالمواقع الجغرافية خارج الولايات المتحدة. |
jdk.management | يحدد واجهات إدارة خاصة بـ JDK لمراقبة JVM والتحكم فيه. |
jdk.management.agent | يُعرّف هذا الأمر وكيل الإدارة القائم على JMX لـ JVM. |
jdk.management.jfr | يحدد واجهة إدارة مسجل رحلات JDK (JFR). |
jdk.naming.dns | ينفذ موفر تسمية جافا لنظام أسماء النطاقات لحل أسماء النطاقات. |
jdk.naming.rmi | ينفذ موفر تسمية RMI Java لاستدعاء الأساليب عن بعد. |
jdk.net | يحدد واجهة برمجة التطبيقات الخاصة بـ JDK لبرمجة الشبكات. |
jdk.nio.mapmode | يحدد أوضاع تعيين الملفات المحددة المتوفرة في JDK. |
jdk.sctp | يوفر واجهة برمجة التطبيقات لبروتوكول نقل التحكم في التدفق (SCTP) في JDK. |
jdk.security.auth | يقوم بتنفيذ وحدات المصادقة والواجهات المتعلقة بالأمان داخل javax.security.authالحزمة (الواجهات في javax.security.auth.*). |
jdk.security.jgss | يحدد هذا القسم امتدادات GSS-API وتنفيذ آلية SASL GSSAPI في JDK. |
jdk.xml.dom | يُعرّف هذا الجزء من JDK مجموعة فرعية من واجهة برمجة تطبيقات نموذج كائن المستند (DOM) التابعة لاتحاد شبكة الويب العالمية (W3C) والتي لا يغطيها Java SE. ويُصدّر الحزم خارج نطاق الاسم (من ).javaorg.w3c.dom |
jdk.zipfs | يوفر هذا البرنامج تطبيقًا لموفر نظام ملفات ZIP، مما يتيح الوصول إلى ملفات ZIP كأنظمة ملفات. |
الوحدة jdk.unsupportedليست وحدة رسمية، ولكنها غالبًا ما تكون مضمنة مع JDK، وتمثل تفاصيل التنفيذ في مكتبة Java القياسية . [ 18 ] تحتوي على حزم في مساحة الاسم sun.*(التي تحتوي على sun.misc.Unsafeالفئة، المستخدمة لمعالجة وحدة المعالجة المركزية والأجهزة، وإدارة الذاكرة مباشرة، وأشياء أخرى) [ 19 ] وحزم com.sun.*.
وحدة jdk.unsupported { تصدير sun.misc ؛ تصدير sun.reflect ؛ تصدير com.sun.nio.file ؛يفتح sun.misc ؛ يفتح sun.reflect ؛ }Jakarta EE ، التي كانت سابقًا جزءًا من مكتبة Java القياسية، ليست معيارية، ومع ذلك يمكن لأنظمة البناء إنشاء وحدات نمطية تلقائية لها.
وحدات JavaFX
كانت JavaFX تُدمج سابقًا مع JDK الأساسي، حتى إصدار Java 11 عندما تم فصلها إلى OpenJFX. تنقسم JavaFX إلى الوحدات النمطية التالية. [ 20 ]
| اسم | وصف |
|---|---|
javafx.base | يحدد واجهات برمجة التطبيقات الأساسية لمجموعة أدوات واجهة المستخدم JavaFX (مثل واجهات برمجة التطبيقات للربط والخصائص والمجموعات والأحداث). |
javafx.controls | يحدد هذا القسم واجهات برمجة التطبيقات (APIs) لعناصر التحكم في واجهة المستخدم، والرسوم البيانية، والقوالب في مجموعة أدوات واجهة المستخدم JavaFX. |
javafx.fxml | يحدد هذا القسم واجهات برمجة تطبيقات FXML في مجموعة أدوات واجهة المستخدم JavaFX. |
javafx.graphics | يحدد مخطط المشهد، والرسوم المتحركة، والهندسة، وواجهات برمجة التطبيقات الأخرى ذات الصلة لمجموعة أدوات واجهة المستخدم JavaFX. |
javafx.media | يحدد هذا الملف واجهات برمجة تطبيقات تشغيل الوسائط ومحتوى الصوت لمجموعة أدوات واجهة المستخدم JavaFX. |
javafx.swing | يحدد هذا القسم واجهات برمجة التطبيقات (APIs) الخاصة بدعم التوافق بين JavaFX و Swing لمجموعة أدوات واجهة المستخدم JavaFX. |
javafx.web | يحدد واجهات برمجة تطبيقات WebView لمجموعة أدوات واجهة المستخدم JavaFX. |
jdk.jsobject | يُعرّف واجهات برمجة التطبيقات (APIs) لكائنات جافا سكريبت . |
jfx.incubator.input | آلية حاضنة لتخصيص عناصر تحكم JavaFX. |
jfx.incubator.richtext | يحتضن عنصر تحكم RichTextArea لـ JavaFX. |
روابط مع OSGi
لا يهدف نظام وحدات جافا إلى دعم جميع الوظائف التي تدعمها منصة OSGi حاليًا (مثل نموذج دورة الحياة وسجل الخدمات). مع ذلك، سيدعم نظام وحدات جافا وظائف لا تدعمها OSGi، مثل نمطية وقت الترجمة، والدعم المدمج للمكتبات الأصلية. [ 21 ] نُشرت مقالتان في عام 2016 تستكشفان كيفية تفاعل نظام وحدات جافا مع OSGi. يمكن الاطلاع عليهما على موقع InfoQ [ 22 ] ومدونة تحالف OSGi. [ 23 ]
انظر أيضاً
مراجع
- ↑ "نظام وحدات منصة جافا (JSR 376)" . شركة أوراكل . تم الاطلاع عليه بتاريخ 2018-07-02 .
- 1 2 "مشروع جيغسو" . شركة أوراكل . تم الاسترجاع في 29-11-2015 .
- ↑ مارك راينهولد (20 سبتمبر 2009). "حان وقت... الخطة البديلة" . شركة أوراكل . تم الاطلاع عليه بتاريخ 21 يونيو 2017 .
- ↑ "JDK 9" . شركة أوراكل . تم الاطلاع عليه بتاريخ 24-02-2016 .
- ↑ "فهم وحدات جافا 9: ماهيتها وكيفية استخدامها" . شركة أوراكل. مؤرشف من الأصل بتاريخ 14 أغسطس 2022. تم الاطلاع عليه بتاريخ 8 ديسمبر 2025 .
- ↑ "جافا 9: تاريخ الإصدار والميزات الجديدة" . techworld.com. 21-07-2017 . تم الاطلاع عليه بتاريخ 18-11-2017 .
- ↑ "jlink: رابط جافا (JSR 282)" . شركة أوراكل . تم الاطلاع عليه بتاريخ 12 مارس 2016 .
- ↑ "نظام وحدات منصة جافا (JSR 376)" . شركة أوراكل . تم الاطلاع عليه بتاريخ 29-11-2015 .
- ↑ "JEP 238: ملفات JAR متعددة الإصدارات" . شركة أوراكل . تم الاطلاع عليه بتاريخ 31 يوليو 2017 .
- ↑ "JEP 253: إعداد عناصر تحكم واجهة المستخدم JavaFX وواجهات برمجة تطبيقات CSS للنمذجة المعيارية" . شركة أوراكل . تم الاطلاع عليه بتاريخ 31 يوليو 2017 .
- ↑ "JEP 260: تغليف معظم واجهات برمجة التطبيقات الداخلية" . شركة أوراكل . تم الاطلاع عليه بتاريخ 31 يوليو 2017 .
- ↑ "JEP 275: تغليف تطبيقات جافا المعيارية" . شركة أوراكل . تم الاطلاع عليه بتاريخ 31 يوليو 2017 .
- ↑ مارك راينهولد (2016-03-08). "حالة نظام الوحدات النمطية" . شركة أوراكل . تم الاطلاع عليه بتاريخ 2017-02-18 .
- ↑ "JEP 396: تغليف مكونات JDK الداخلية بشكل قوي افتراضياً" . تم الاطلاع عليه بتاريخ 2021-02-06 .
- ↑ "ملخص وحدة JDK" . شركة أوراكل . 24-06-2016. مؤرشف من الأصل بتاريخ 08-12-2015 . تم الاطلاع عليه بتاريخ 18-02-2017 .
- ↑ "JEP 494: إعلانات استيراد الوحدات (معاينة ثانية)" . openjdk.org .
- ↑ "مواصفات واجهة برمجة تطبيقات Java® Platform، الإصدار القياسي ومجموعة تطوير Java الإصدار 24" . docs.oracle.com .
- ↑ "jdk.unsupported" . cr.openjdk.org . OpenJDK . تم الاطلاع عليه بتاريخ 10 أكتوبر 2025 .
- ↑ بن إيفانز (4 مايو 2020). "الفئة غير الآمنة: غير آمنة بأي سرعة" . blogs.oracle.com . شركة أوراكل.
- ↑ "نظرة عامة (JavaFX)" . openjfx.io .
- ↑ مارك راينهولد (24 أغسطس 2012). "مشروع جيغسو: متأخر عن القطار: الأسئلة والأجوبة" . شركة أوراكل . تم الاطلاع عليه بتاريخ 29 نوفمبر 2015 .
- ↑ "جافا 9، وOSGi، ومستقبل النمطية" . InfoQ . تم الاطلاع عليه بتاريخ 26-09-2016 .
- ↑ "طبقات وحدات جافا وحزم OSGi" . تحالف OSGi . تم الاسترجاع في 1 أغسطس 2016 .
روابط خارجية
- طلبات مواصفات جافا
- النمطية
