Jak stworzyć wtyczkowy program Java?

Chcę stworzyć program Java, który można rozszerzyć za pomocą wtyczek. Jak mogę to zrobić i gdzie powinienem szukać?

Mam zestaw interfejsów, które wtyczka musi zaimplementować, i powinien być w słoiku. Program powinien uważać na nowe Jary w folderze względnym (do programu) i jakoś je zarejestrować.


Chociaż lubię Eclipse RCP, myślę, że to za dużo dla moich prostych potrzeb.

To samo tyczy się wiosny, ale skoro miałem na nią patrzeć równie dobrze mogę spróbować.

Ale mimo to, wolałbym znaleźć sposób, aby stworzyć mój własny Plugin "framework" tak proste, jak to możliwe.

Author: Kev, 2008-08-25

6 answers

Zrobiłem to dla oprogramowania, które pisałem w przeszłości, jest bardzo poręczny. Zrobiłem to, najpierw tworząc Interfejs, że wszystkie moje "plugin" klasy potrzebne do wdrożenia. Następnie użyłem Java ClassLoader , aby załadować te klasy i utworzyć ich instancje.

/ Align = "left" / :
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

Który załadował klasę, teraz musisz utworzyć jej instancję, zakładając, że nazwa interfejsu to MyModule:

MyModule modInstance = (MyModule)loadedClass.newInstance();
 40
Author: Steve M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-26 05:23:57

Zajrzyj do OSGi .

Z jednej strony, OSGi zapewnia wszelkiego rodzaju infrastrukturę do zarządzania, uruchamiania i robienia wielu innych rzeczy za pomocą modułowych komponentów oprogramowania. Z drugiej strony, to może mnie zbyt ciężkie dla Twoich potrzeb.

Nawiasem mówiąc, Eclipse używa OSGi do zarządzania swoimi wtyczkami.

 17
Author: David Koelle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-25 14:09:53

Polecam przyjrzeć się z bliska API dostawcy usług Java (SPI) . Zapewnia prosty system do znajdowania wszystkich klas we wszystkich słoikach na ścieżce klas, które ujawniają się jako implementujące określoną usługę. Używałem go w przeszłości z systemami wtyczek z wielkim sukcesem.

 15
Author: jsight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-26 05:23:09

Chociaż będę drugi akceptowane rozwiązanie, jeśli podstawowa obsługa wtyczek jest potrzebna (co jest w przypadku większości przypadków), istnieje również Java Plugin Framework (JPF), który, choć brakuje odpowiedniej dokumentacji, jest bardzo schludny implementacji plugin framework.

Jest łatwy do wdrożenia i - po przejściu przez idiosynchrazje klasowe - bardzo łatwy do opracowania. Komentarz do powyższego jest, aby mieć świadomość, że plugin loadpaths poniżej katalogu wtyczki musi być nazwany po pełnej classpath oprócz tego, że jej pliki klas są rozmieszczone w normalnej ścieżce pakietu o nazwie path. Np.

plugins
`-com.my.package.plugins
  `-com
    `-my
      `-package
        `-plugins
          |- Class1.class
          `- Class2.class
 6
Author: Steen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-20 21:47:15

Przy podejściu do klasy domowej: Chociaż jest to zdecydowanie dobry sposób, aby dowiedzieć się o classloaderach, istnieje coś o nazwie "classloader hell", znane głównie przez ludzi, którzy zmagali się z nim, jeśli chodzi o użycie w większych projektach. Sprzeczne klasy są łatwe do wprowadzenia i trudne do rozwiązania.

I jest dobry powód, dla którego eclipse przeszło na OSGi lata temu. Tak więc, jeśli jest to bardziej niż projekt dla zwierząt domowych, poważnie przyjrzyj się OSGi. Warto na to spojrzeć. Dowiesz się o classloaders PLUS rozwijający się standard technologiczny.

 4
Author: Toni Menzel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-13 07:30:06

Czy rozważałeś zbudowanie na bazie bogatej Platformy klienckiej Eclipse, a następnie ujawnienie Eclipse extension framework?

Również, w zależności od twoich potrzeb, Spring Framework może pomóc w tym i innych rzeczach, które możesz chcieć zrobić: http://www.springframework.org/

 1
Author: John with waffle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-24 23:38:08