سؤال

أرغب في إنشاء برنامج Java يمكن توسيعه باستخدام المكونات الإضافية.كيف يمكنني أن أفعل ذلك وأين يجب أن أبحث عنه؟

لدي مجموعة من الواجهات التي يجب على البرنامج المساعد تنفيذها، ويجب أن تكون في جرة.يجب أن يراقب البرنامج الجرار الجديدة في مجلد نسبي (للبرنامج) ويسجلها بطريقة ما.


على الرغم من أنني أحب Eclipse RCP، إلا أنني أعتقد أنه يفوق احتياجاتي البسيطة.

الشيء نفسه ينطبق على الربيع، ولكن بما أنني كنت سألقي نظرة عليه على أي حال، فقد أقوم بتجربته أيضًا.

ولكن ما زلت أفضل العثور على طريقة لإنشاء "إطار عمل" البرنامج الإضافي الخاص بي بأبسط طريقة ممكنة.

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

المحلول

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

إحدى الطرق التي يمكنك القيام بها هي التالية:

File dir = new File("put path to classes you want to load here");
URL loadPath = dir.toURI().toURL();
URL[] classUrl = new URL[]{loadPath};

ClassLoader cl = new URLClassLoader(classUrl);

Class loadedClass = cl.loadClass("classname"); // must be in package.class name format

لقد أدى ذلك إلى تحميل الفصل، والآن تحتاج إلى إنشاء مثيل له، بافتراض أن اسم الواجهة هو MyModule:

MyModule modInstance = (MyModule)loadedClass.newInstance();

نصائح أخرى

تفحص OSGi.

من ناحية، يوفر OSGi جميع أنواع البنية التحتية لإدارة وبدء وتنفيذ الكثير من الأشياء الأخرى باستخدام مكونات البرامج المعيارية.من ناحية أخرى، يمكن أن يكون ثقيل الوزن بالنسبة لاحتياجاتك.

بالمناسبة، يستخدم Eclipse OSGi لإدارة المكونات الإضافية الخاصة به.

أنصحك بإلقاء نظرة فاحصة عليها واجهة برمجة تطبيقات موفر خدمة جافا (SPI)..إنه يوفر نظامًا بسيطًا للعثور على جميع الفئات في جميع الجرار الموجودة على مسار الفصل والتي تعرض نفسها على أنها تنفذ خدمة معينة.لقد استخدمته في الماضي مع أنظمة المكونات الإضافية بنجاح كبير.

على الرغم من أنني سأؤيد الحل المقبول، إذا كانت هناك حاجة إلى دعم البرنامج الإضافي الأساسي (وهو ما يحدث في معظم الأوقات)، فهناك أيضًا الحل إطار البرنامج المساعد جافا (JPF) والذي، على الرغم من افتقاره إلى الوثائق المناسبة، يعد تطبيقًا أنيقًا للغاية لإطار عمل البرنامج المساعد.

إنه قابل للنشر بسهولة - وعندما تجتاز خصوصيات تحميل الفصل - يكون من السهل جدًا تطويره.التعليق على ما ورد أعلاه هو أن ندرك أنه يجب تسمية مسارات تحميل المكونات الإضافية الموجودة أسفل دليل المكونات الإضافية باسم ممتلىء classpath بالإضافة إلى نشر ملفات الفئة الخاصة به في مسار حزمة عادي يسمى المسار.على سبيل المثال

plugins
`-com.my.package.plugins
  `-com
    `-my
      `-package
        `-plugins
          |- Class1.class
          `- Class2.class

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

وهناك سبب وجيه وراء انتقال Eclipse إلى OSGi منذ سنوات.لذا، إذا كان الأمر مجرد مشروع مفضل، فقم بإلقاء نظرة جادة على OSGi.إنه يستحق النظر إليه.ستتعرف على أدوات تحميل الفصل بالإضافة إلى معيار تكنولوجي ناشئ.

هل فكرت في البناء على منصة Rich Client Platform الخاصة بـ Eclipse، ثم الكشف عن إطار عمل ملحق Eclipse؟

أيضًا، اعتمادًا على احتياجاتك، قد يساعدك Spring Framework في ذلك وفي أشياء أخرى قد ترغب في القيام بها: http://www.springframework.org/

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