إذا سألت مطوراً عن Eclipse، فالإجابة في الغالب سوف تكون: محرر Java الثقيل الذي استخدمناه في الجامعة. ولكن لو فتحت ملف Dockerfile لتطبيق Java اليوم فقد تجد السطر FROM eclipse-temurin، ولو قرأت كود تطبيق Spring Boot 3 أو أحدث، وقد انتقل إلى واجهات Jakarta EE، فسوف تجد import jakarta.persistence.Entity، ولو نظرت في جهاز إنترنت الأشياء IoT الذي يرسل قراءات حساس إلى السيرفر فقد يكون الوسيط Broker الذي يستقبلها اسمه Eclipse Mosquitto، وكل هذه مشاريع تستضيفها مؤسسة Eclipse، ولا علاقة لأغلبها بالمحرر.
وقد شرحنا في قسم المؤسسات المحايدة في مقال الحوكمة لماذا توجد مؤسسات مثل Eclipse، والمراحل التي يمر بها المشروع فيها من الاقتراح إلى النضج، ولن نعيد ذلك هنا، وكتبنا مقالاً مشابهاً عن مشاريع مؤسسة Apache. أما هذا المقال فيعرض مشاريع Eclipse التي سوف تقابلها في العمل، ومن أين جاء كل منها، ثم ننهيه بتجربة عملية تشغل فيها Mosquitto وJava من Temurin في Containers.
وسوف نناقش في هذا المقال ما يلي:
- قصة مؤسسة Eclipse باختصار: من مشروع أطلقته IBM في 2001 إلى مؤسسة أوروبية مقرها بروكسل.
- Jakarta EE: كيف انتقلت Java EE من Oracle، ولماذا تغيرت أسماء الحزم Packages من
javaxإلىjakarta، ومعها سيرفرات GlassFish وJetty وإطار Vert.x. - Adoptium وبناء Temurin المجاني من Java.
- أدوات المطورين: Eclipse IDE وTheia وChe وسوق الإضافات Open VSX.
- إنترنت الأشياء: Mosquitto وPaho وKura، ثم برمجيات السيارات Software Defined Vehicle باختصار.
- تجربة عملية: وسيط Mosquitto بكلمة مرور، وناشر من سطر الأوامر، وبرنامج Java على Temurin يرسل رسالة بمكتبة Paho.
من مشروع أطلقته IBM إلى مؤسسة في بروكسل
تقول صفحة التعريف بالمؤسسة إن مشروع Eclipse أنشأته IBM في نوفمبر 2001 بدعم مجموعة Consortium من شركات البرمجيات، وإن مؤسسة Eclipse Foundation أنشئت في يناير 2004 كمؤسسة مستقلة غير ربحية، والهدف أن يكون للمشروع بيت محايد لا تملكه شركة واحدة، حتى تطمئن الشركات المنافسة لـ IBM إلى أن تساهم فيه. وبعد ذلك توسعت المؤسسة خارج المحرر، فاستقبلت Jetty في 2009 ومواصفات Java EE في 2017، وأصبحت اليوم كما تقول الصفحة نفسها تستضيف Adoptium وJakarta EE وبرمجيات السيارات وEclipse IDE وأكثر من 450 مشروعاً، ويدعمها أكثر من 300 عضو.
والمحطة التي تميز Eclipse عن المؤسسات الأمريكية الأخرى هي انتقالها إلى أوروبا، ففي 12 مايو 2020 أعلنت المؤسسة أنها سوف تتحول إلى جمعية دولية غير ربحية مقرها بروكسل في بلجيكا، والسبب كما كتبت أن أغلب نموها كان يحدث في أوروبا أصلاً، فقد كان 170 من أعضائها وأكثر من 900 من أصحاب صلاحية الكتابة Committers فيها مقيمين في أوروبا. ثم في 14 يناير 2021 أعلنت أنها أكملت الإجراءات وأسست Eclipse Foundation AISBL رسمياً، وتقول صفحتها عن أوروبا إنها تعمل اليوم تحت القانون الأوروبي. وهذا يهمك إذا كنت في جهة تهتم بالسيادة الرقمية Digital Sovereignty، لأن المؤسسة التي تملك العلامات التجارية والكود تخضع لقانون أوروبي وليس أمريكياً.
والصورة التالية تبين هذه المحطات:

ما الذي تستضيفه Eclipse غير المحرر؟
المؤسسة تعرض كل مشاريعها في دليل المشاريع، والصورة التالية تجمع المشاريع التي يتناولها هذا المقال في خمس مجموعات:

ولكل مشروع في دليل المؤسسة صفحة فيها تبويب Governance يعرض مراجعاته الرسمية بالتاريخ: مراجعة الإنشاء Creation Review، ومراجعات الإصدارات Release Review، ومراجعة التخرج Graduation Review، ومنه أخذنا أغلب التواريخ في الأقسام التالية، وهو أسرع طريقة تعرف بها هل المشروع ما زال في مرحلة الاحتضان Incubation أم أصبح ناضجاً Mature، بحسب المراحل المكتوبة في عملية التطوير في Eclipse.
Jakarta EE: ماذا حدث لـ Java EE؟
مواصفات Java EE هي مجموعة الواجهات البرمجية API التي تكتب بها تطبيقات Java للمؤسسات، مثل Servlet لاستقبال طلبات HTTP، وJPA لقواعد البيانات، وJAX-RS لواجهات REST، وكانت تملكها Sun ثم Oracle. وفي 12 سبتمبر 2017 أعلنت Oracle مع IBM وRed Hat نقل Java EE إلى مؤسسة Eclipse، وفي 28 سبتمبر أنشأت المؤسسة مشروع EE4J ليستقبل الكود، ثم في 26 فبراير 2018 أعلنت الاسم الجديد Jakarta EE بعد تصويت شارك فيه قرابة 7000 شخص وصوت أكثر من 64% منهم لهذا الاسم.
وقد يتساءل البعض: إذا انتقل الكود كاملاً، فلماذا تغيرت أسماء الحزم؟ والإجابة في إعلان مايو 2019، حيث كتبت المؤسسة أنها لم تستطع الاتفاق مع Oracle على شروط تسمح لمجتمع Eclipse بتعديل الحزم تحت اسم javax، وأن هذه الحزم يمكن أن تبقى في مواصفات Jakarta EE ولكن كما هي فقط دون أي تعديل. والسبب أن كلمة Java علامة تجارية Trademark تملكها Oracle، وبالتالي كان أمام المجتمع خياران: أن تبقى المواصفات مجمدة للأبد، أو أن تنتقل إلى اسم جديد، فاختار الثاني. والصورة التالية تبين ما حدث بعد ذلك:

في الرسم أعلاه لاحظ التالي، والتواريخ كلها من صفحة إصدارات Jakarta EE:
- Jakarta EE 8 صدر في 10 سبتمبر 2019 بنفس الحزم
javax، أي أنه نفس Java EE 8 تحت اسم جديد، فلم يحتج أحد أن يغير كوده. - Jakarta EE 9 صدر في 8 ديسمبر 2020، وإعلانه يقول بوضوح إن الحزم أصبحت
jakarta.*بدلjavax.*، ولم يضف ميزات جديدة تقريباً، فكان هدفه الوحيد هو هذا التغيير. - Jakarta EE 10 صدر في 22 سبتمبر 2022، وJakarta EE 11 في 26 يونيو 2025، أما Jakarta EE 12 فما زال تحت التطوير بحسب صفحة مواصفاته.
- التأثير العملي يظهر في السيرفرات، فـ دليل الترحيل إلى Tomcat 10 يقول إن هناك تغييراً كبيراً يكسر التوافق بين Tomcat 9 وTomcat 10 لأن الحزم تغيرت من
javaxإلىjakarta، وإنه يجب إعادة ترجمة تطبيقات الويب Recompile على الواجهات الجديدة، لذلك إذا نقلت تطبيقاً قديماً إلى Tomcat 10 أو 11 دون تعديل فلن يعمل.
والخطأ الشائع هنا أن يغير الفريق أسطر import في كوده فقط، ثم يفاجأ بأن مكتبة قديمة في الاعتماديات ما زالت تستخدم javax، فيفشل التطبيق عند التشغيل وليس عند البناء، لذلك افحص شجرة الاعتماديات Dependency Tree كاملة قبل الترحيل، وقد شرحنا كيف تقرؤها في قسم Maven في مقال أدوات البناء.
السيرفرات وأطر العمل: GlassFish وJetty وVert.x
- Eclipse GlassFish: سيرفر تطبيقات Application Server يطبق مواصفات Jakarta EE كاملة، وقد جاء مع Java EE من Oracle وتغير اسمه إلى Eclipse GlassFish في إعلان اسم Jakarta EE نفسه. وتقول صفحته إن الإصدار 8.0 يطبق Jakarta EE 11 بالكامل، وآخر إصداراته 8.0.4 في أغسطس 2026، والسلسلة 7 ما زالت تصدر لمن يحتاج Jakarta EE 10.
- Eclipse Jetty: سيرفر HTTP وServlet Container خفيفة تدخل غالباً داخل التطبيق نفسه Embedded بدل أن تثبت وحدها. وتقول صفحته إن سيرفر HTTP الذي أصبح Jetty طوره Greg Wilkins في 1995، وإن المشروع نقل مكوناته الأساسية إلى مؤسسة Eclipse في 2009، والسلسلة الحالية هي 12 بحسب صفحة التنزيل.
- Eclipse Vert.x: مجموعة أدوات Toolkit لبناء تطبيقات تفاعلية Reactive على JVM، أي تطبيقات لا تحجز Thread لكل طلب وإنما تعالج آلاف الاتصالات بعدد قليل من الخيوط، وقد شرحنا هذا الأسلوب في مقال الخيوط والأقفال وasync. وأقدم مراجعة له في سجل حوكمته هي مراجعة الإصدار 2.1.0 في يونيو 2014، وسلسلته الحالية هي 5.
Adoptium وTemurin: Java مجانية وموثوقة
عندما تنزل Java فأنت تنزل بناءً Build من كود OpenJDK، وهناك أكثر من جهة تبني هذا الكود وتنشره، والمشكلة التي واجهها المطورون أن الشروط والتراخيص تغيرت أكثر من مرة، فظهر في 2017 مشروع AdoptOpenJDK ليبني Java مجانية من كود OpenJDK للجميع. وتقول صفحة Adoptium إن مشروع Eclipse Adoptium هو امتداد لمهمة AdoptOpenJDK الأصلية، وفي 2 أغسطس 2021 أعلن أول إصدار باسم Eclipse Temurin شمل Java 8 و11 و16، وتخرج مشروع Temurin في ديسمبر 2021 بحسب سجل حوكمته.
واليوم تقول الواجهة البرمجية لـ Adoptium إن الإصدارات طويلة الدعم LTS المتاحة هي 8 و11 و17 و21 و25، وإن أحدثها 25، وتنشر Docker Image رسمية باسم eclipse-temurin سوف نستخدمها في التجربة. وإذا كنت تريد أن تفهم الفرق بين مواصفات Java والتطبيقات التي تبنيها، فقد شرحنا ذلك في مقال مواصفات لغات البرمجة وتطبيقاتها.
أدوات المطورين: المحرر وما بعده
- Eclipse IDE: بيئة التطوير المتكاملة IDE التي بدأت بها القصة في 2001، وما زالت تصدر بانتظام كل ثلاثة أشهر تقريباً، فـ قائمة الإصدارات فيها 2025-09 و2025-12 و2026-03 و2026-06 و2026-09، والصفحة الرئيسية تقول إن الإصدار التالي في 2026-12.
- Eclipse Theia: إطار لبناء بيئات تطوير تعمل في المتصفح أو على سطح المكتب، وتصفه أسئلته الشائعة بأنه بديل مفتوح لـ VS Code يدعم إضافات VS Code عبر Open VSX. وقد قدم اقتراحه في أبريل 2018 بقيادة Sven Efftinge وMarc Dumais ومن الجهات المهتمة Ericsson وRed Hat وTypeFox، وتخرج في أبريل 2020.
- Eclipse Che: نظام ينشئ بيئات تطوير جاهزة في Containers داخل عنقود Kubernetes، فيفتح المطور مشروعه في المتصفح وكل الأدوات جاهزة دون تثبيت شيء على جهازه، ويعرض سجل حوكمته إنشاءه في نوفمبر 2014.
- Open VSX: سوق إضافات Extensions Registry محايد بديل عن Visual Studio Marketplace، وتقول صفحة المشروع إنه يستخدم مع Theia ومحررات أخرى، والسبب في وجوده أن المحررات المفتوحة المبنية على كود VS Code تحتاج مصدراً محايداً للإضافات لا تتحكم فيه شركة واحدة. وقد قدمت اقتراحه شركة TypeFox في نوفمبر 2019، وتخرج في يونيو 2026.
إنترنت الأشياء IoT وبروتوكول MQTT
بروتوكول MQTT بروتوكول رسائل خفيف يعمل بنمط النشر والاشتراك Publish/Subscribe، فالجهاز ينشر رسالته على موضوع Topic مثل site/riyadh/temp، والوسيط Broker يوصلها لكل من اشترك في هذا الموضوع، دون أن يعرف الناشر من المشتركون. وتقول صفحة Paho إن MQTT أنشأته IBM وشركة Arcom في حدود 1998، ولهذا تجد عدة مشاريع له في Eclipse:
- Eclipse Mosquitto: وسيط MQTT خفيف يطبق كما تقول صفحته إصدارات البروتوكول 5.0 و3.1.1 و3.1، ويعمل على جهاز صغير مثل Raspberry Pi وعلى السيرفر. ومطوره وقائده Roger Light كما في صفحة فريقه، وسجل حوكمته يبدأ في أغسطس 2014، وآخر إصداراته 2.1.2 في 9 فبراير 2026 بحسب مدونته.
- Eclipse Paho: مكتبات العميل Client Libraries لـ MQTT بعدة لغات مثل Java وPython وC، أي الطرف الذي يتصل بالوسيط وينشر أو يشترك، وأنشئ في Eclipse في يناير 2012 بحسب سجل حوكمته، وسوف نستخدم مكتبته في Java في التجربة.
- Eclipse Kura: إطار مكتوب بـ Java وOSGi لبوابات الحافة IoT Edge Gateway، أي الجهاز الذي يجمع بيانات الحساسات في الموقع ويرسلها إلى السحابة، وصدر منه الإصدار 1.0.0 في سبتمبر 2014 بحسب سجل حوكمته.
برمجيات السيارات Software Defined Vehicle
السيارة الحديثة أصبحت مجموعة حواسيب، والوظائف فيها تضاف بتحديث برمجي أكثر من القطع، وهذا ما يسمى المركبة المعرفة بالبرمجيات Software Defined Vehicle. وفي 8 مارس 2022 أعلنت المؤسسة مجموعة عمل Working Group باسم Eclipse SDV لتطوير أساس برمجي مفتوح تشترك فيه شركات السيارات والموردون بدل أن تبني كل شركة كل شيء وحدها. ومن أحدث مشاريعها Eclipse Open Vehicle API الذي يقدم واجهة موحدة لإشارات السيارة وأحداثها، وما زال في مرحلة الاحتضان Incubating منذ إنشائه في أغسطس 2025، لذلك تعامل معه كمشروع تجريبي.
تجربة عملية: Mosquitto وJava من Temurin
سوف نشغل وسيط Mosquitto بكلمة مرور، ثم ننشر رسالة من سطر الأوامر، ثم نكتب برنامج Java صغيراً يعمل على Temurin وينشر رسالة بمكتبة Paho، ومشترك واحد يستقبل الرسائل، والصورة التالية تبين التجربة:

تشغيل الوسيط بكلمة مرور
نسخ Mosquitto 2 لا تقبل اتصالات من الشبكة دون إعداد صريح، والطريقة البسيطة التي تجدها في كثير من الأمثلة هي allow_anonymous true، ولكنها تعني أن أي شخص يصل إلى المنفذ يستطيع أن ينشر ويقرأ كل الرسائل، لذلك سوف نستخدم ملف كلمات مرور. ملف الإعداد mosquitto.conf كما يلي:
listener 1883
allow_anonymous false
password_file /mosquitto/config/passwdالآن نجهز Volume للإعداد، وننشئ فيه ملف كلمات المرور بأداة mosquitto_passwd، ثم نشغل الوسيط على شبكة خاصة، مع Docker Image بإصدار محدد Pinned Tag:
docker network create lab-eclipse-net
docker volume create lab-eclipse-config
docker run --rm --name lab-eclipse-setup \
-v "$PWD/mosquitto.conf:/src/mosquitto.conf:ro" \
-v lab-eclipse-config:/mosquitto/config \
eclipse-mosquitto:2.1.2-alpine sh -c '
cp /src/mosquitto.conf /mosquitto/config/ &&
mosquitto_passwd -c -b /mosquitto/config/passwd sensor S3ns0r-Lab-2026 &&
chown mosquitto:mosquitto /mosquitto/config/passwd &&
chmod 0700 /mosquitto/config/passwd &&
ls -l /mosquitto/config'
docker run -d --name lab-eclipse-mosquitto --network lab-eclipse-net \
-p 127.0.0.1:18830:1883 \
-v lab-eclipse-config:/mosquitto/config:ro \
eclipse-mosquitto:2.1.2-alpine
docker logs lab-eclipse-mosquittoوالمخرج سوف يكون كما يلي:
Adding password for user sensor
total 8
-rwxr-xr-x 1 root root 75 Oct 8 07:48 mosquitto.conf
-rwx------ 1 mosquitto mosquitto 193 Oct 8 07:48 passwd
1791445719: Info: running mosquitto as user: mosquitto.
1791445719: mosquitto version 2.1.2 starting
1791445719: Config loaded from /mosquitto/config/mosquitto.conf.
1791445719: Bridge support available.
1791445719: Persistence support available.
1791445719: TLS support available.
1791445719: TLS-PSK support available.
1791445719: Websockets support available.
1791445719: Plugin builtin-security has registered to receive 'basic-auth' events.
1791445719: Opening ipv4 listen socket on port 1883.
1791445719: Opening ipv6 listen socket on port 1883.
1791445719: mosquitto version 2.1.2 runningفي الإعداد أعلاه لاحظ التالي:
- الملف
passwdلا يحتوي كلمة المرور نفسها وإنما الهاش Hash الخاص بها، وأذوناته0700ومالكه المستخدمmosquittoالذي يعمل به الوسيط داخل ال Container كما يقول السطرrunning mosquitto as user: mosquitto. - المنفذ منشور على
127.0.0.1فقط، فلا يصل إليه أحد من خارج الجهاز، أما ال Containers الأخرى فتصل إليه بالاسمlab-eclipse-mosquittoعلى الشبكة الخاصة. - الرقم في أول كل سطر هو الوقت بصيغة Unix Timestamp، وهو يقابل 8 أكتوبر 2026.
وإذا ظهر لك عند التشغيل الخطأ التالي فالسبب الأذونات Permissions:
1791445678: password-file: Error: Unable to open pwfile "/mosquitto/config/passwd".
1791445678: mosquitto version 2.1.2 terminatingويحدث هذا عندما تنشئ الملف في مجلد مربوط Bind Mount بمالك root وأذونات 0700، فالوسيط يعمل بالمستخدم mosquitto ولا يستطيع قراءة ملف لا يملكه، لذلك يجب أن يكون مالك الملف هو المستخدم الذي يعمل به الوسيط، كما فعلنا بالأمر chown في الخطوات أعلاه.
النشر والاشتراك من سطر الأوامر
الآن نشغل مشتركاً على كل المواضيع تحت site/riyadh/، ثم ننشر ثلاث مرات: الأولى بكلمة مرور خاطئة، والثانية والثالثة بالكلمة الصحيحة:
docker run -d --name lab-eclipse-sub --network lab-eclipse-net eclipse-mosquitto:2.1.2-alpine \
mosquitto_sub -h lab-eclipse-mosquitto -u sensor -P S3ns0r-Lab-2026 -t 'site/riyadh/#' -v -C 2
docker run --rm --name lab-eclipse-pub --network lab-eclipse-net eclipse-mosquitto:2.1.2-alpine \
mosquitto_pub -h lab-eclipse-mosquitto -u sensor -P wrong -t site/riyadh/temp -m 41.5; echo "exit=$?"
docker run --rm --name lab-eclipse-pub --network lab-eclipse-net eclipse-mosquitto:2.1.2-alpine \
mosquitto_pub -h lab-eclipse-mosquitto -u sensor -P S3ns0r-Lab-2026 -t site/riyadh/temp -m 41.5; echo "exit=$?"
docker run --rm --name lab-eclipse-pub --network lab-eclipse-net eclipse-mosquitto:2.1.2-alpine \
mosquitto_pub -h lab-eclipse-mosquitto -u sensor -P S3ns0r-Lab-2026 -t site/riyadh/humidity -m 18 -q 1; echo "exit=$?"
docker logs lab-eclipse-subوالمخرج سوف يكون كما يلي:
Connection error: Connection Refused: not authorised
Error: The connection was refused
exit=5
exit=0
exit=0
site/riyadh/temp 41.5
site/riyadh/humidity 18في الإعداد أعلاه لاحظ التالي:
- المحاولة الأولى رفضت برمز الخروج 5، وسجل الوسيط يكتب السبب
disconnected: not authorised، وهذا ما تبحث عنه في السجلات إذا اشتكى جهاز من أنه لا يستطيع الاتصال. - الخيار
-t 'site/riyadh/#'يشترك في كل المواضيع تحتsite/riyadh/، فالعلامة#تعني كل المستويات التالية، والخيار-vيطبع اسم الموضوع قبل الرسالة. - الخيار
-C 2يجعل المشترك يخرج بعد رسالتين، وهو مناسب للتجربة فقط. - الرسالة الثالثة أرسلت بالخيار
-q 1، أي مستوى جودة الخدمة QoS 1 الذي يضمن وصول الرسالة مرة واحدة على الأقل، أما الافتراضي فهو QoS 0 دون تأكيد.
برنامج Java على Temurin يرسل بمكتبة Paho
أولاً نتأكد من إصدار Java في ال Docker Image:
docker run --rm --name lab-eclipse-temurin eclipse-temurin:25.0.4.1_1-jdk java -versionopenjdk version "25.0.4.1" 2026-08-18 LTS
OpenJDK Runtime Environment Temurin-25.0.4.1+1 (build 25.0.4.1+1-LTS)
OpenJDK 64-Bit Server VM Temurin-25.0.4.1+1 (build 25.0.4.1+1-LTS, mixed mode, sharing)بعد ذلك ننزل مكتبة Paho من Maven Central ونتحقق من البصمة SHA-1 المنشورة بجانبها، ثم نكتب البرنامج في ملف واحد Publish.java:
curl -s -o paho.jar https://repo1.maven.org/maven2/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.2.5/org.eclipse.paho.client.mqttv3-1.2.5.jar
curl -s https://repo1.maven.org/maven2/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.2.5/org.eclipse.paho.client.mqttv3-1.2.5.jar.sha1; echo
sha1sum paho.jar1546cfc794449c39ad569853843a930104fdc297
1546cfc794449c39ad569853843a930104fdc297 paho.jarimport org.eclipse.paho.client.mqttv3.*;
public class Publish {
public static void main(String[] args) throws Exception {
System.out.println("java.vendor = " + System.getProperty("java.vendor"));
System.out.println("java.version = " + System.getProperty("java.version"));
var client = new MqttClient("tcp://lab-eclipse-mosquitto:1883", "temurin-demo", null);
var opts = new MqttConnectOptions();
opts.setUserName("sensor");
opts.setPassword("S3ns0r-Lab-2026".toCharArray());
client.connect(opts);
client.publish("site/riyadh/power", "on".getBytes(), 1, false);
System.out.println("published site/riyadh/power = on (QoS 1)");
client.disconnect();
}
}الآن نعيد تشغيل المشترك لرسالة واحدة، ثم نشغل البرنامج مباشرة من ملف المصدر دون خطوة ترجمة منفصلة:
docker rm -f lab-eclipse-sub
docker run -d --name lab-eclipse-sub --network lab-eclipse-net eclipse-mosquitto:2.1.2-alpine \
mosquitto_sub -h lab-eclipse-mosquitto -u sensor -P S3ns0r-Lab-2026 -t 'site/riyadh/#' -v -C 1
docker run --rm --name lab-eclipse-temurin --network lab-eclipse-net \
-v "$PWD:/app:ro" -w /app \
eclipse-temurin:25.0.4.1_1-jdk java -cp paho.jar Publish.java
docker logs lab-eclipse-subوالمخرج سوف يكون كما يلي:
java.vendor = Eclipse Adoptium
java.version = 25.0.4.1
published site/riyadh/power = on (QoS 1)
site/riyadh/power onفي الإعداد أعلاه لاحظ التالي:
- السطر
java.vendor = Eclipse Adoptiumيؤكد أن البرنامج يعمل على Temurin، وهذا ما تكتبه في تقرير الاعتماديات إذا سألك فريق الامتثال Compliance من أين جاءت Java في السيرفر. - الأمر
java -cp paho.jar Publish.javaيشغل ملف المصدر مباشرة، وهذا مناسب للتجربة والسكربتات الصغيرة، أما المشروع الحقيقي فتبنيه بـ Maven أو Gradle. - البرنامج والوسيط والمكتبة كلها من مؤسسة Eclipse، والمشترك لا يعرف ولا يهتم بأن الناشر برنامج Java، فهذه فائدة البروتوكول المفتوح.
- حجم Image الوسيط
eclipse-mosquitto:2.1.2-alpineهو 41.8MB، بينماeclipse-temurin:25.0.4.1_1-jdkهو 603MB لأنها تحتوي JDK كاملاً، وفي الإنتاج استخدم Image من نوع JRE وهي أصغر لتشغيل تطبيق مبني مسبقاً.
التنظيف
نحذف ما أنشأناه فقط بالاسم:
docker rm -f lab-eclipse-sub lab-eclipse-mosquitto
docker network rm lab-eclipse-net
docker volume rm lab-eclipse-configمتى تحتاج مشاريع Eclipse؟
- تطبيق Java للمؤسسات: أنت تستخدم Jakarta EE غالباً حتى لو كنت تكتب بـ Spring Boot 3 أو أحدث، فخطط للانتقال إلى الحزم
jakartaإذا كان تطبيقك ما زال علىjavax، لأن السيرفرات الحديثة مثل Tomcat 10 وما بعده لن تشغله. - Java في الإنتاج: Temurin خيار مجاني بدعم طويل لإصدارات LTS، وال Image
eclipse-temurinرسمية في Docker Hub، فثبت الإصدار برقمه الكامل في ملف Dockerfile حتى لا يتغير تحتك. - أجهزة وحساسات: Mosquitto مع Paho يكفيان لأغلب المشاريع الصغيرة والمتوسطة، ولا تشغل الوسيط أبداً بدخول مجهول على منفذ مفتوح للإنترنت.
- بيئة تطوير مفتوحة: إذا كانت جهتك لا تستطيع الاعتماد على سوق إضافات Microsoft، فـ Theia وOpen VSX هما البديل المحايد.
- قبل الاعتماد على أي مشروع: افتح تبويب Governance في صفحته، فإذا كان ما زال Incubating مثل Open Vehicle API فاعرف أنه تجريبي.
الخلاصة
وصلنا لنهاية الموضوع، وأهم ما فيه:
- Eclipse بدأت مشروعاً من IBM في 2001، وأصبحت مؤسسة مستقلة في 2004، ونقلت مقرها إلى بروكسل في 2021 لأن أغلب أعضائها ونموها في أوروبا، وتستضيف اليوم أكثر من 450 مشروعاً.
- Jakarta EE هي Java EE بعد انتقالها من Oracle، والاسم
javaxبقي مع Oracle، فتغيرت كل الحزم إلىjakartaفي Jakarta EE 9 سنة 2020، وهذا التغيير يكسر التطبيقات القديمة على Tomcat 10 وما بعده. - Adoptium هو امتداد AdoptOpenJDK، وTemurin بناء Java المجاني الذي تجده في Docker Hub باسم
eclipse-temurin. - الأدوات أكبر من المحرر: Theia وChe للتطوير في المتصفح، وOpen VSX سوق إضافات محايد.
- Mosquitto وPaho وKura تغطي MQTT من الوسيط إلى العميل إلى بوابة الحافة، وشغل الوسيط دائماً بملف كلمات مرور مملوك للمستخدم الذي يعمل به.
- مجموعة SDV تبني برمجيات السيارات المفتوحة، وأغلب مشاريعها ما زالت حديثة.
دليلمشاريع مؤسسة Apache: ماذا يحل كل مشروعكيف ترتب مشاريع مؤسسة Apache حسب المشكلة التي يحلها كل منها، وكيف تفحص صحة أي مشروع قبل أن تعتمد عليه.
دليلمن يدير المشروع مفتوح المصدر؟ نماذج الحوكمة Governanceمن يقرر في مشروع يساهم فيه آلاف الأشخاص، ومن يستطيع تغيير رخصته، وما الذي تفحصه قبل أن تعتمد على أي مشروع.
دليلما هي البرمجيات مفتوحة المصدر؟ القصة وأشهر الرخصكيف بدأت البرمجيات الحرة والمفتوحة، وما الفرق بين الحر والمجاني، وكيف تعرف ما تسمح به رخصة أي مشروع قبل أن تبني عليه.
دليلاللغة شيء والمترجم شيء آخر: من يقرر مستقبل لغات البرمجة؟لماذا لا تصح جمل مثل «Python بطيئة»، وما الفرق بين مواصفة اللغة والبرامج التي تطبقها، ومن يقرر مستقبلها.
دليلأدوات البناء Build Tools وماذا يحدث عندما تبني مشروعكما الذي يحدث بين ضغطة البناء والملف الناتج، ولماذا ينجح البناء على جهازك ويفشل على سيرفر CI، ومتى يعطيك نفس النتيجة مرتين.
دليلمشاريع CNCF: خريطة أدوات Cloud Nativeماذا تعني مراحل Sandbox وIncubating وGraduated في CNCF، وما الذي يحله كل مشروع متخرج، وكيف يختار فريق صغير منها ما يحتاجه فقط.
دليلمشاريع Linux Foundation خارج CNCFكيف تحولت Linux Foundation إلى مظلة فوق OpenJS وPyTorch وOpenSSF وValkey وغيرها، ومن يمولها ويقرر فيها، وكيف تقارن بمؤسسات Apache وEclipse وPython.سجل التحديثات
- أكتوبر 2026: كتابة المقال، وقراءة التواريخ من مدونة مؤسسة Eclipse وصفحات المشاريع وسجلات حوكمتها، وتنفيذ التجربة على Docker 29.8.0 مع eclipse-mosquitto:2.1.2-alpine وeclipse-temurin:25.0.4.1_1-jdk ومكتبة Paho 1.2.5.