16 października 2009

Tworzenie pakunków OSGi w Eclipse IDE 3.6m2 - Eclipse się sprawdził

Potrzebowałem stworzyć wtyczkę OSGi, ale nie miałem zamiaru zejść na poziom linii poleceń. To już przerabiałem w Tworzenie pakietów OSGi z Apache Maven 2 czy Pakunki OSGi w projekcie wielomodułowym Apache Maven 2 z maven-bundle-plugin. Tym razem miałem potrzebę skorzystania z IDE.

NetBeans IDE odpada, bo nie oferuje żadnego wsparcia w tym temacie. IntelliJ IDEA - hmmm, nie mam wciąż pojęcia, czy się nadaje, ale przecież Eclipse IDE to w końcu środowisko oparte na OSGi - jako platformie i składowych. W Eclipse można stworzyć jego wtyczki (rozszerzenia), które są niczym innym jak pakunkami OSGi.

Po chwili byłem po lekturze artykułu OSGi with Eclipse Equinox - Tutorial i byłem gotów do eksperymentów.

Zaczynam typowo. Otwieram Eclipse 3.6M2, Ctrl+N i wybieram Plug-in Project.

Uzupełniam dane projektu przyszłej wtyczki - Project name ustawiam na ejb-client i wybieram Target Platform jako an OSGi framework: standard (ktoś wie, co to oznacza i czego nie mam w porównaniu z Equinox?).

Kolejny ekran bez zmian

i w następnym Templates wybieram Hello OSGi Bundle.

Super te szablony, bo z nimi stworzenie bardziej wyrafinowanej wtyczki (wszystkie poza wspomnianym Hello OSGi Bundle) sprowadza się do odpowiedniego wyboru. Nie trzeba nawet wiedzieć, co to są pakunki, aby je stworzyć!

Ostatni ekran to konfiguracja szablonu, więc może się różnic, w zależności od wcześniejszego wyboru.

Kiedy pojawi się pytanie o przełączenie perspektywy na Plug-in Development

wciskam Yes i w końcu mam swój wymarzony pakunek OSGi.

Teraz można dalej się bawić w tworzenie bardziej wyrafinowanych elementów pakunku, a na uznanie zasługują dwie rzeczy - edytor MANIFEST.MF (patrz zrzut ekranu wyżej) oraz widok Outline (na zrzucie wyżej po prawej).

Kiedy przełączyłem się na zakładkę MANIFEST.MF w edytorze manifestu, w widoku Outline pojawiła się charakterystyka pakunku. Bajera!

Mając gotową wtyczkę/pakunek wystarczy File > Export i wybrać Deployable plug-ins and fragments.

Mamy możliwość wyboru pakunku i jego danych do eksportu.

Po prostu bajka. Wszystko idzie bez najmniejszych potknięć. W katalogu plugins, poniżej wskazanego katalogu, czeka na nas gotowy do uruchomienia pakunek OSGi.

W łatwy sposób mamy możliwość importu istniejących pakunków oraz definiowania zależności między nimi - określenie importów i eksportów w manifeście.

Tym samym Eclipse IDE 3.6m2 stało się narzędziem numer 1, jeśli chodzi o tworzenie pakunków OSGi.

Ciekawe, czy IntelliJ IDEA daje jakiekolwiek wsparcie dla tworzenia pakunków OSGi?

2 komentarze:

  1. Opcja 'equinox' odblokowuje API które dostępne jest tylko i wyłącznie w silniku equinox a nie jest dostępne w innych silnikach OSGi. W świecie J2EE można to porównać do sytuacji Hibernate (criteria) w stosunku do czystego JPA.

    Takim zablokowany w opcji 'standard' elementem jest obsługa rozszerzeń które są odpowiednikiem usług deklaratywnych. Jeden i drugi mechanizm ma swoje zalety. Kilka lat temu Neil Bartlett porównał oba mechanizmy. Artykuł ma już swoje lata ale warto go przeczytać:

    http://www.eclipsezone.com/articles/extensions-vs-services/

    Jeżeli byłbyś bardziej zainteresowany mechanizmem rozszerzeń szczegółowy opis możesz znaleźć pod tym adresem (wiem że 2003 to już prehistoria ale OSGi i Eclipse/Equinox mają już swoje lata):

    http://eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html

    Pozdrowienia,
    Grzesiek

    OdpowiedzUsuń
  2. Jeżeli chciałbyś zobaczyć jak taki mechanizm wygląda w realu wejdź sobie na stronę (lub w dokumentcji):

    http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/extension-points/index.html

    Wybierz dowolne z rozszerzeń np: 'org.eclipse.core.contenttype.contentTypes' i wklej je do zakładki szukaj w Eclipse (Plug-in search). Dostaniesz listę pluginów które wykorzystują dany punkt rozszerzenia.

    Jeżeli wybierzesz jeden z takich wpisów pojawi się się deklaracja tego użycia. Jeżeli wybierzesz opcję: 'Import Contributing Plug-in as|Binary project with linked content' do twojego workspace wgrany zostanie odpowiedni plugin z kodów źródłowych. Możesz sobie zobaczyć jak ludzie wykorzystują dany punkt rozszerzeń, postawić breakpointa itp. Następnie wystarczy uruchomić SDK z IDE: 'Run Configurations|Eclipse Application|New launch configuration|Run...' :)

    Jest to moim zdaniem najlepsza szkoła by nauczyć się poprawnie modularyzować aplikacje. W końcu środowisko Eclipse to grubo ponad 1000 bundli. Bez wątpienia jest to najbardziej złożona aplikacja OSGi jaka powstała :D

    OdpowiedzUsuń