2010-12-30 5 views
5

Szukałem w narzędziach PAX na OPS4J na przykład: this one i myślałem, że znalazł dobry sposób, aby:dobry sposób na „wrap” słoiki dla OSGi z Maven

  • określić artefakt
  • Załóż zmontowany słoika (jar, który zawiera wszystkie zależności) od tego słoika i jego przechodnie zależności
  • owinąć go BND stworzyć wiązkę OSGi

okazuje się, że nie miałem racji - nie appe r, że rzeczy PAX to robią. (RTFM, prawda? :))

Ale to mnie zastanowiło: czy jest coś, co robi to, o co proszę?

Pomyślałem, że może uda mi się to zrobić, tworząc prosty POM i używając wtyczki maven-bundle, ale wydaje mi się, że może to być trochę kłopotliwe z powodu tego, o co proszę.

UWAGA: otrzymuję że osadzanie i montażem słoik nie jest naprawdę „drogą OSGi” - więc nie będę tego robić, chyba że naprawdę czułem się przydatne. Na przykład - wiosna.

Z góry dziękuję.

+0

Myślałem, że Spring ma już moduły przyjazne OSGi. Jeśli masz słoiki, których musisz użyć, dlaczego nie osadzić ich w module OSGi? –

+0

Tak, wiosna ma. Być może jest to zły przykład - kieruję się tym, że bolesne może być wdrażanie 15 zależności (konwertowanych na pakiety lub nie), gdy nie trzeba tych 15 rozdzielić. – javamonkey79

Odpowiedz

4

trzeba utrzymać lokalny POM, aby to zrobić. Nie ma narzędzia, które zajmie bibliotekę/jar i wypluje odpowiedni MANIFEST OSGi w słoiku. ServiceMix, podobnie jak Spring, mają już wiele rzeczy, które można wykorzystać jako przykłady. Dwa takie przykłady Proponuję patrząc na to:

  • commons-io - prosta biblioteka otoki
  • OpenJPA - otula główną słoik i przynosi w zależności z nią
+0

Z pracy z SMX doszedłem do wniosku, że było * coś * tam na zewnątrz. Dzięki (+1) – javamonkey79

2

Robimy coś podobnego do tego, co opisujesz. Na przykład mamy wewnętrzną wersję Apache QPid. Występuje w postaci 6 słoików (klient, rdzeń, często, backporty itp.), Których rzadko używasz pojedynczo. Mamy jeden POM z BND, który bierze wszystkie słoiki i tworzy z nich jeden uber-osgi-jar.

Kroki:

  1. zadeklarować zależności (mamy słoiki, więc ogłosił je jako dużą liczbą wykazywanych zależności systemowych.)
  2. importu kompilacji wtyczki Maven-bundle-plugin (2.1.0)
  3. Set poprawne instrukcje na eksport, import i prywatne pakiety
  4. Wykonanie „wrap” celem w „pakiecie” fazy
+0

Prawdopodobnie mogę dołączyć POM, jeśli jest to wymagane. – omerkudat

+0

Tak, to właśnie miałem na myśli: "Pomyślałem, że mógłbym to zrobić, tworząc prosty POM i używając wtyczki do pakowania maven-bundle, ale wydaje mi się, że może to być trochę kłopotliwe, o co proszę." . Jednak, jak sądzę, nie istnieje prostsze rozwiązanie w tej chwili, jeśli napiszesz POM, przyjmuję w nadziei, że pomoże to komuś innemu :) – javamonkey79

8

Napisałem archetyp maven, które pomogą opakowujesz słoik jako pakiet OSGI.

Powiedzmy chcesz zawinąć Commons kolekcje wersję 3.2.1

Pierwszy dostać archetyp i zainstalować go

git clone git://github.com/HallwayTech/maven-wrap-jar-archetype.git 
cd maven-wrap-jar-archetype 
maven install 

Następnie użyj archetyp, aby rozpocząć swój projekt.

mvn archetype:create \ 
    -DarchetypeGroupId=com.hallwaytech.osgi \ 
    -DarchetypeArtifactId=wrap-jar \ 
    -DarchetypeVersion=1.0-SNAPSHOT \ 
    -DgroupId=commons-collections \ 
    -DartifactId=commons-collections \ 
    -Dversion=3.2.1 

cd commons-kolekcje

mvn install 

Aby wdrożyć do Apache Sling wewnątrz metę Felix:

mvn install -Pdeploy 
1

Próbowałem The accepted answer i Erik's answer. Sugestia Erika była prosta i działała od razu po wyjęciu z pudełka. Chociaż wydawało mi się, że w moim przypadku powstał ogromny MANIFEST, a potem przypomniałem sobie p2-maven-plugin. Ta ostatnia metoda działa bardzo dobrze w dużej liczbie przypadków. Jeśli wymagany artefakt jest już pakietem, lub jego zależności są pakietami, po prostu umieszcza je w repozytorium, które buduje. Jeśli nie, uruchomi się maven-bundle-plugin z niektórymi ustawieniami domyślnymi (lub możesz skonfigurować potrzebne ustawienia). Bardzo fajny!

Szczególnie podoba mi się to, że chwyta przejściowe zależności i troszczy się o nich. Jeśli nie potrzebujesz repozytorium, ale tuż po opakowaniu, łatwo jest wybrać go z folderu target/repository/plugins.