Как создать pluginable программу Java?

голоса
32

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

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


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

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

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

Задан 25/08/2008 в 00:28
источник пользователем
На других языках...                            


6 ответов

голоса
39

Я сделал это для программного обеспечения я написал в прошлом, это очень удобно. Я сделал это первым создание интерфейса , что все мои «плагин» классы , необходимые для реализации. Затем я использовал 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();
Ответил 25/08/2008 d 01:21
источник пользователем

голоса
16

Посмотрите в OSGi .

С одной стороны, OSGi предоставляет все виды инфраструктуры для управления, запуска, и делать много других вещей, с модульными компонентами программного обеспечения. С другой стороны, она могла бы мне слишком большой вес для ваших нужд.

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

Ответил 25/08/2008 d 15:09
источник пользователем

голоса
14

Я рекомендую вам внимательно посмотреть на Java - Service Provider (SPI) API . Она обеспечивает простую систему для обнаружения всех классов во всех банках на пути к классам , которые выставляют себя в качестве реализации конкретной услуги. Я использовал его в прошлом с плагином системы с большим успехом.

Ответил 25/08/2008 d 04:05
источник пользователем

голоса
6

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

Это легко развертывается и - когда вы получаете через idiosynchrasies - загрузка классов очень легко развиваться с. Комментарий к вышесказанному, чтобы быть в курсе , что плагин loadpaths ниже директории плагина должен называться после полного пути к классам , в дополнение к тому , его файлы классов , развернутые в обычный пакет пути по имени пути. Например

plugins
`-com.my.package.plugins
  `-com
    `-my
      `-package
        `-plugins
          |- Class1.class
          `- Class2.class
Ответил 20/12/2008 d 22:47
источник пользователем

голоса
4

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

И есть хорошая причина, почему затмение сделали шаг к OSGi лет назад. Так что, если его более любимый проект, принять серьезный взгляд в OSGi. Его стоит посмотреть. Вы узнаете о загрузчиков классов плюс новый стандарт Technolgy.

Ответил 30/09/2008 d 11:04
источник пользователем

голоса
1

Рассматривали ли вы здание на вершине Rich Client Platform в Eclipse, а затем подвергая рамки расширения Eclipse?

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

Ответил 25/08/2008 d 00:38
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more