2009-06-04 2 views
15

Oto coś oczywiste, że powinny być łatwe do zrobienia ...Lista zaćmienie zainstalowanych wtyczek w czasie wykonywania

Jak mogę odzyskać listę zainstalowanych wtyczek w czasie wykonywania? Nie widać oczywistego sposobu na zrobienie tego Platform.getBundle() wymaga określonej nazwy wtyczki.

Czy to może ograniczeniem dla jakiegoś powodu bezpieczeństwa?

Odpowiedz

12

Od here:

Klasa BundleContext ma metodę getBundles(), która zwraca wszystkich zainstalowanych pakietów.

Otrzymasz wystąpienie BundleContext, gdy pakiet zostanie aktywowany BundleActivator.start(BundleContext)).

Można go używać, aby uzyskać pewne Bundle version number na przykład.

http://t-templier.developpez.com/tutoriel/java/osgi/osgi1/images/architecture-osgi-haut-niveau.png

interakcji pomiędzy wiązki są wykonane poprzez dwa uzupełniające się mechanizmy: pakiet eksportu i importu/obiektu przeglądowej rejestracji usługi.

http://sfelix.gforge.inria.fr/osgi-security/images/osgi/osgi_interoperability.png

Publikacja i wyszukiwanie usług są wykonywane poprzez odniesienieBundleContext że każdy pakiet otrzymuje w momencie uruchamiania.
Podczas procesu publikacji, pakiety reklamowe rejestruje usługę publikując interfejs Java jest wykonawczych, a także poprzez dostarczanie klasę wykonawczą tego interfejsu.
Wyszukiwanie jest wykonywane przez wiązkę klienta, który dostaje usługę z BundleContext i używa go jako standardowego obiektu Java.

+0

Wielkie dzięki VonC, to tylko to, co potrzebne. W końcu użyłem rejestru rozszerzeń i znalazłem wtyczki, których szukałem przez rozszerzenie, które wszyscy mieli ze sobą, ale ta odpowiedź jest kanoniczna. Czy omawiasz usługi, ponieważ w ten sposób pakiety odkrywają nawzajem swoją obecność, a tym samym umożliwiają wykrywanie zainstalowanych wtyczek? – Bryji

+0

@Bryan: tak, część serwisowa była po to, aby nadać kontekstowi kontekst (nie jest przeznaczony) do użycia BundleContext. – VonC

3

Jeśli szukasz napisać to w kodzie, patrz odpowiedź VonC użytkownika.

Jeśli chcesz po prostu, że to robi, nie ma już jeden w Eclipse: Window-> Show Widok-> Inne ...-> PDE Runtime-> Plugin Registry. Wyświetla to wtyczki, ich rozszerzenia, zależności i kto udostępnia rozszerzenia.

2

użyć poniższy kod, aby otrzymać listę wtyczki zainstalowanej w RCP

BundleContext ctx = FrameworkUtil.getBundle(your/Class/Name.class).getBundleContext(); 
Bundle[] bundles = ctx.getBundles();