Вопрос

Я хочу создать программу Java, которую можно расширить с помощью плагинов.Как это сделать и где искать?

У меня есть набор интерфейсов, которые должен реализовать плагин, и он должен находиться в банке.Программа должна следить за новыми jar-файлами в относительной (программной) папке и каким-то образом их регистрировать.


Хотя мне нравится Eclipse RCP, я думаю, что это слишком много для моих простых нужд.

То же самое и со Spring, но, поскольку я все равно собирался на него взглянуть, я мог бы попробовать.

Но все же я бы предпочел найти как можно более простой способ создать свою собственную «структуру» плагина.

Это было полезно?

Решение

Я сделал это для программного обеспечения, которое написал раньше, это очень удобно.Я сделал это, сначала создав интерфейс, который необходимо было реализовать всем моим классам «плагинов».Затем я использовал Java КлассЗагрузчик для загрузки этих классов и создания их экземпляров.

Один из способов сделать это:

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 предоставляет всевозможную инфраструктуру для управления, запуска и выполнения множества других задач с помощью модульных программных компонентов.С другой стороны, это может показаться слишком тяжелым для ваших нужд.

Кстати, Eclipse использует OSGi для управления своими плагинами.

Рекомендую внимательно посмотреть API поставщика услуг Java (SPI).Он предоставляет простую систему для поиска всех классов во всех Jars в пути к классам, которые представляют собой реализацию определенного сервиса.Раньше я с большим успехом использовал его с системами плагинов.

Хотя я поддержу принятое решение, если необходима базовая поддержка плагинов (что происходит в большинстве случаев), существует также Платформа плагинов Java (JPF), который, хотя и не имеет надлежащей документации, представляет собой очень аккуратную реализацию платформы плагинов.

Его легко развернуть, и — если вы разберетесь с особенностями загрузки классов — с ним очень легко разрабатывать.Комментарий к вышесказанному: следует помнить, что пути загрузки плагинов ниже каталога плагинов должны называться в честь полный classpath в дополнение к тому, что файлы классов развертываются по обычному пути к пакету с именем path.Например.

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

При использовании отечественного загрузчика классов:Хотя это определенно хороший способ узнать о загрузчиках классов, существует нечто, называемое «ад загрузчика классов», в основном известное людям, которые боролись с ним, когда дело доходит до использования в более крупных проектах.Конфликтующие классы легко ввести и трудно решить.

И есть веская причина, по которой компания eclipse перешла на OSGi много лет назад.Итак, если это нечто большее, чем просто любимый проект, серьезно присмотритесь к OSGi.Это стоит посмотреть.Вы узнаете о загрузчиках классов ПЛЮС о новом технологическом стандарте.

Рассматривали ли вы возможность создания поверх платформы Eclipse Rich Client Platform, а затем предоставления доступа к платформе расширений Eclipse?

Кроме того, в зависимости от ваших потребностей, Spring Framework может помочь в этом и других вещах, которые вы, возможно, захотите сделать: http://www.springframework.org/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top