Najpierw potrzebujesz interfejsu, który muszą zaimplementować wszystkie wtyczki, np
public interface Plugin {
public void load(PluginConfiguration pluginConfiguration);
public void run();
public void unload();
public JComponent getConfigurationPage();
}
Autorzy wtyczek powinni następnie umieścić swoje wtyczki w plikach JAR. Twoje aplikacje otwierają plik JAR i mogą następnie użyć atrybutu z manifestu JAR lub listy wszystkich plików w pliku JAR, aby znaleźć klasę implementującą interfejs wtyczki. Utwórz instancję tej klasy, wtyczka jest gotowa do pracy.
Oczywiście możesz również zaimplementować pewien rodzaj piaskownicy, aby wtyczka była ograniczona w tym, co może, a czego nie może zrobić. Stworzyłem małą aplikację testową (i napisałem o niej na blogu ), która składa się z dwóch wtyczek, z których jedna ma odmowę dostępu do lokalnych zasobów.
Użyj OSGi .
Stanowi podstawę systemu wtyczek Eclipse. Equinox to implementacja Eclipse (licencjonowana EPL), a Felix to implementacja projektu Apache (licencjonowana publiczna licencja Apache).
Eclipse zapewnia konkretny przykład, że OSGi może pokryć wspomniane przez Ciebie punkty (lub możesz po prostu zbudować swoją aplikację na bazie Eclipse RCP, jeśli chcesz mieć pełny stos Eclipse / SWT / JFace).
źródło
Od wersji 1.6 istnieje java.util.ServiceLoader, którego można użyć, jeśli chcesz zakodować swój własny prosty system.
Ale jeśli chcesz czegoś więcej niż podstawowe funkcje, użyj jednego z istniejących frameworków.
źródło
Istnieje również JPF (Java Plugin Framework) .
źródło
Użyj PF4J . Obsługuje Web, Spring i Wicket. Łatwy w użyciu i budowaniu aplikacji
źródło
Pracowałem nad OSGi przez tydzień - intensywny, tylko tydzień OSGi. Koniec końców to był zły sen, ale wiele się nauczyłem.
Udało mi się uruchomić OSGi (niełatwe, wszystkie przykłady są nieaktualne, wszystko w sieci ma co najmniej trzy lata, jeśli nie pięć), ale miałem poważne problemy z integracją go z istniejącym projektem z powodu problemów z przejawy słoików.
Krótko mówiąc, istnieje tylko kilka mało znanych narzędzi używanych do budowania manifestów i nie są one dobrze udokumentowane (BND Tools nie jest niejasny, ale jest przeznaczony do określonego procesu w Eclipse). Ponadto większość dostępnych informacji OSGi nie jest przeznaczona dla twórców aplikacji, którzy mają już aplikację komputerową.
To sprawia, że kontekst informacji jest niejasny lub nieodpowiedni. Największą pomocą okazały się posty na blogu Neila Bartletta, ale nawet tym nie udało się uzyskać działającego systemu (złapałem kod z samouczka Felixa i poskładałem go razem, aby uruchomić osadzony framework). Znalazłem wersję roboczą jego książki, którą opublikował za darmo lata temu, co jest doskonałe, ale przykłady w Eclipse nie działają z powodu zmian w obsłudze Eclipse OSGi.
Każdy krok jest główną przeszkodą. Później spróbuję opublikować tutaj więcej szczegółów.
źródło
Myślę, że rekomendowanie OSGi do rozwiązania powyższego problemu jest bardzo złą radą. OSGi to „właściwy wybór”, ale w scenariuszu takim jak powyższy myślę, że JPF lub jakiś własny minimalistyczny framework jest wystarczający.
źródło
Wiele lat temu zacząłem taki projekt i mam nadzieję, że wkrótce będzie gotowy. Zainspirowałem się takimi projektami jak NetBeans i Eclipse, ale w międzyczasie zmieniło się na coś trochę innego. OSGi wygląda teraz na dobry wybór, ale nie miałem okazji porównać go z moim projektem, jest podobny do wspomnianego powyżej JPF, ale jednocześnie różni się pod wieloma względami.
Podstawową ideą, która mnie zmotywowała, jest jak najłatwiejsze budowanie aplikacji Java, bez oddzielania aplikacji internetowych, aplikacji desktopowych lub apletów / aplikacji JWS (oczywiście nie obejmuje to jeszcze UI) jako podstawowej funkcjonalności.
Zbudowałem projekt mając na uwadze kilka celów:
źródło