سؤال

لقد قرأت الكثير من رمز الإعتدال لهذا الغرض، ولكن لا يزال لا يزال من غير قادر على معرفة طريقة غير مكروقات للحصول على مجموعة الكلات للحصول على حزمة OSGI في إعداد Eclipse Equinox. هناك واحد؟

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

المحلول

الإجابة القصيرة (بالتأكيد لشركة OSGI 4.1، غير متأكد من 4.2) لا يمكنك الحصول على Classlader Bundle. ومع ذلك Bundle واجهة تعرض أ loadclass () الطريقة وهذا من شأنه أن يسمح لك بكتابة طبقة نصية يلف واجهة برمجة التطبيقات الحزمة والمندوبين إلى ذلك loadClass() طريقة. أو يمكنك توفير بعض الوقت واستخدام الربيع DM bundledlegatingclasslasloader. فئة بدلا من ذلك.

نصائح أخرى

في OSGI 4.3 يمكنك استخدام:

bundle.adapt(BundleWiring.class).getClassLoader()

يمكن الحصول على محمل الفئة من حزمة من خلال واجهة BundleWiring. هنا مثال قصير:

Bundle bundle = bundleContext.getBundle();
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();

في رمز Java العادي، يمكنك الحصول على Loader Class الذي قام بتحميل كائن معين

object.getClass().getClassLoader();

أو حتى فقط

SomeType.class.getClassLoader();

الأمر نفسه ينطبق على الإعتدال، ما عليك سوى استخدام كائن أو اكتب يأتي من الحزمة التي تهتم بها.

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