سؤال

كيف يمكنني إضافة حزم إلى استيراد الحزمة من داخل الكود؟ أحتاج إليه منذ استخدام المكتبات التي تعتمد على التفكير وتتطلب حزم أخرى ولا أريد أن أحتاج إلى إضافة هذه الحزم يدويا إلى البيان .MF لكل حزمة أقوم بتطويرها

هل كانت مفيدة؟

المحلول

لا تستطيع. يتم تقييم حزم الاستيراد في مرحلة القرار. (المراحل مثبتة -> حل -> نشط).

يتم تنفيذ التعليمات البرمجية الخاصة بك عندما تكون الحزمة نشطة، لذلك بعد فوات الأوان لإضافة حزم الاستيراد.

يمكنك أن تفعل 2 الأشياء:

  • استيراد الحزمة الحزم التي ستستخدمها
  • استخدم خاصية Dynamic-ImportPackage لتحديد الحزم التي يمكن إرجاء قرارها لوقت التنفيذ

نصائح أخرى

بالإضافة إلى حل فيليبو، يمكنك محاولة عكس التبعية. فاي بدلا من الاتصال وتفتيش الحزم الأخرى، يمكنك السماح للحزم تفعل ذلك. وسيتم استخدام طريقة أخرى تعقب حزمة والحصول على Classloader من الحزمة المتعقبة. باستخدام محمل الفئة هذا، يمكنك التصرف "كحزمة"، لذلك لا تحتاج إلى جملة استيراد الحزمة بعد الآن.

عندما بدأت في استخدام OSGI، كانت هذه واحدة من المتطلبات الأولى التي جئت فيها. مع مرور الوقت، أدركت أنه في جميع الحالات تقريبا، يوجد حل نظيف وأكثر اتساقا. لذلك، فكر في الأمر، إذا كنت بحاجة حقا إلى هذا التبعية. هل لا توجد وسيلة للعكس أو الملخص لإنشاء حل عام؟

إذا كان أي شيء يساعد (كحل أخير)، فيمكنك أيضا إنشاء جزء (في الذاكرة) جزءا مع Bundle الأساسية كمضيف، مما يوفر الواردات المطلوبة. يقدم لك BundleContext طريقة لتحميل حزمة من دفق. عندئذ يجب عليك تحديث واستدعاء RefreshPackages (عبر خدمة PackageAdmin) على حزمة المضيف الخاصة بك من أجل الحصول على Classloader المحدث (يعني إعادة تشغيل حزمة الخاص بك). ومع ذلك، في النهاية، سيكون لديك حق الوصول إلى جميع الحزم الخاصة بك.

كملاحظة جانبية، لن أوصي بالتعامل مع حزمة المضيف الخاصة بك عن طريق تغيير عبارة الاستيراد ثم التحديث ... هذا يجعل حزمة Inventerministic الخاصة بك ولن تعمل مع حزم موقعة. أيضا، هذا ضد كل شيء يتوقع من OSGI (تخيل حزمة متزايدة بمرور الوقت ... تحتاج إلى تقليص الواردات في مرحلة ما أيضا !!!)

هتاف، mirko.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top