Подтвердить что ты не робот

Как создать плагиновую программу Java?

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

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


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

То же самое происходит и для Spring, но так как я все равно посмотрю на это, я бы тоже попробовал.

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

4b9b3361

Ответ 1

Я сделал это для программного обеспечения, которое я написал в прошлом, это очень удобно. Я сделал это, сначала создав интерфейс, который все мои "плагиновые" классы должны были реализовать. Затем я использовал 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();

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

Считаете ли вы, что вы строите поверх платформы Eclipse Rich Client Platform, а затем раскрываете инфраструктуру расширения Eclipse?

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