استثناء في جافا: لم يتم العثور على الوحدة jakarta.cdi
تعتبر الأخطاء المتعلقة بفن إدارة الحزم من أكثر التحديات شيوعًا في تطوير البرمجيات باستخدام تقنيات مثل Spring. واحدة من هذه الأخطاء الشائعة هي الحالة التي يتم فيها الإبلاغ عن عدم القدرة على العثور على وحدة معينة، وهو ما يشير إليه الخطأ المتمثل في "spring – jdeps: Exception in thread ‘main’ java.lang.module.FindException: Module jakarta.cdi not found, required by jakarta.transaction". سنستعرض في هذا المقال كيفية تحليل هذا الخطأ وإيجاد الحلول المناسبة.
سبب الخطأ
الخطأ المشار إليه يظهر عند محاولة تطبيق Java تحديدًا في استخدامه لأدوات مثل jdeps
لتحديد الاعتماديات المطلوبة. الخطأ يعني أن وحدة jakarta.cdi
غير موجودة أو غير متاحة في بيئة التنفيذ، بالرغم من أنها ضرورية لتحميل وحدة jakarta.transaction
. هذا الانفصال عن الاعتماديات يمكن أن يؤثر سلبًا على تشغيل التطبيق ويولد مشكلات في التوافق.
تحليل عملية بناء الصورة باستخدام Docker
عند استخدام Docker لبناء صورة تحتوي على تطبيق Spring، يجب التأكد من وجود جميع الوحدات الضرورية قبل بدء عملية البناء. في الواقع، يشير السجل إلى أن تطبيقك يعتمد على وحدتين: jakarta.cdi
و jakarta.transaction
. في حالة عدم وجود هذه الوحدات، ستظهر الأخطاء التي تعيق تنفيذ أو تشغيل التطبيق.
الحل المقترح للخطأ
من أجل معالجة مشكلة "spring – jdeps: Exception in thread ‘main’ java.lang.module.FindException: Module jakarta.cdi not found, required by jakarta.transaction"، يجب اتباع بعض الخطوات البسيطة لضمان أن جميع الوحدات المطلوبة موجودة.
-
تعديل ملف
pom.xml
: يجب التأكد من أن ملفpom.xml
يحتوي على الاعتمادية الصحيحة لوحدات Jakarta التي يحتاجها المشروع. يمكن القيام بذلك من خلال إضافة المكتبات المفقودة كالتالي:<dependency> <groupId>jakarta.enterprise</groupId> <artifactId>jakarta.enterprise.cdi-api</artifactId> <version>3.0.0</version> <scope>provided</scope> </dependency>
-
تحديث الصور المستخدمة في Docker: قد تحتاج إلى استخدام صورة Docker تعتمد على Java JDK/SDK وتحتوي على الوحدات الأحدث، يمكنك استخدام صورة أخرى ذات سمعة جيدة مثل
openjdk:17-jdk-slim
. - التحقق من الاعتماديات: تأكد من عدم وجود أي نسخ متضاربة من الوحدات في بيئة البناء. يمكنك استعمال الأوامر مثل
mvn dependency:tree
للتأكد من عدم تعارضات بين المكتبات.
استخدام jlink لتقليل حجم الصورة
بعد تحديد الوحدات المطلوبة، يمكنك استخدام أداة jlink
لإنشاء صورة JRE مخصصة تحتوي فقط على الوحدات اللازمة. تأكد من أن طريقة الوصول إلى هذه الوحدات صحيحة وأنها قد تم تحميلها في الصورة المستخدمة. اليك مثال عن كيفية تنفيذ ذلك:
RUN jlink --add-modules $(cat Modules.txt) --strip-debug --no-man-pages --no-header-files --output jre-17
تأكد من تنفيذ هذا الأمر بعد أن تم إعداد Modules.txt
بشكل صحيح ليشمل جميع الوحدات المطلوبة.
الخاتمة
في الختام، ينبغي لنا فهم أن التعامل مع مشكلات مثل "spring – jdeps: Exception in thread ‘main’ java.lang.module.FindException: Module jakarta.cdi not found, required by jakarta.transaction" يتطلب دقة في إدارة الاعتماديات وتنظيم بيئة البناء. من خلال تطبيق الخطوات المذكورة في هذا المقال، يمكن تجنب مثل هذه الأخطاء وتحسين عمليات التطوير باستخدام Spring في بيئات Docker. إن كنت تبحث عن مزيد من الحلول، ننصحك بمراجعة وثائق Jakarta وSpring لضمان استيعابك الكامل للاعتماديات المطلوبة.