شروحات الكمبيوتر والإنترنت والموبايل

استثناء في جافا: لم يتم العثور على الوحدة 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"، يجب اتباع بعض الخطوات البسيطة لضمان أن جميع الوحدات المطلوبة موجودة.

  1. تعديل ملف 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>
  2. تحديث الصور المستخدمة في Docker: قد تحتاج إلى استخدام صورة Docker تعتمد على Java JDK/SDK وتحتوي على الوحدات الأحدث، يمكنك استخدام صورة أخرى ذات سمعة جيدة مثل openjdk:17-jdk-slim.

  3. التحقق من الاعتماديات: تأكد من عدم وجود أي نسخ متضاربة من الوحدات في بيئة البناء. يمكنك استعمال الأوامر مثل 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 لضمان استيعابك الكامل للاعتماديات المطلوبة.

فهد السلال

خبير تقني متخصص في شروحات الكمبيوتر والإنترنت والموبايل، يتمتع بخبرة واسعة في تقديم حلول تقنية مبتكرة ومبسطة. يهدف فهد إلى مساعدة المستخدمين على تحسين تجربتهم التقنية من خلال مقالات وأدلة عملية واضحة وسهلة الفهم.
زر الذهاب إلى الأعلى
Don`t copy text!