2009-09-04 8 views
15

Próbuję osadzić Niektóre słoików na pojedyncze OSGi wiązki za pomocą cechę maven-bundle-pluginJAR osadzania w wiązce OSGi z maven-bundle-plugin

rzecz, która mnie martwi to, że wszystkie pakiety wbudowanych słoików umieścić do nagłówka Import-Package wygenerowanego MANIFEST.MF.

Gdybym określić jednoznacznie używać tylko pakiety muszę, jak w poniższym przykładzie:

Import-Package: org.osgi.framework 

Build nie z błędów BND (referencje nierozwiązanych).

Pytanie więc, w jaki sposób mogę zbudować pakiet z osadzonymi plikami JAR z wymaganym nagłówkiem "Import-Package"?

+0

Czy mógłbyś opublikować instrukcje dotyczące wtyczki do pakowania maven-bundle? –

Odpowiedz

9

Wszystkie pakiety zaimportowane w twoich klasach zostaną zaimportowane przez bnd. Być może nie chcesz, aby te pakiety zostały zaimportowane, ponieważ jesteś wiedzieć, że w czasie wykonywania nie będziesz ich potrzebować. Jeśli nie możesz powstrzymać bnd przed zaimportowaniem ich, możesz uczynić je opcjonalnymi, aby Twój pakunek nadal działał, nawet jeśli nie są dostarczane przez inny pakiet (w czasie połączenia). Spróbuj dodać:

<Import-Package>*;resolution:=optional<Import-Package> 

Do konfiguracji maven bnd w maven.

+1

Nie chcę, aby były importowane z dwóch powodów: 1) są w tym samym pakiecie (w osadzonych plikach JAR), więc, jak rozumiem, nie muszę ich wcale importować! To tylko dodaje trochę śmieci do MANIFEST.MF, który chcę być czysty. 2) Nie chcę, aby przypadkowo zostały zaimportowane z innego pakietu. –

+0

Wtyczka pakietu była dość frustrująca, dopóki nie zrozumiałem tego. – javamonkey79

5

Jednym z możliwych powodów dlaczego widzisz „Unexpected” pakietów w nagłówku Import-Package jest następujący:

Ogólną dobrą praktyką, która obsługuje modelu współpracy w OSGi jest importu wszystkich pakietów, które eksportują - patrz this blog post autorstwa Petera Kriensa, aby uzyskać szczegółowe wyjaśnienie, dlaczego. Bnd (a więc i wtyczka maven-bundle) domyślnie stosuje tę praktykę i automatycznie importuje wszystkie wyeksportowane pakiety. Dlatego powinieneś najpierw sprawdzić nagłówek Export-Package i upewnić się, że eksportujesz tylko te pakiety, które chcesz.

Jeśli chcesz wyeksportować pakiety z zagnieżdżonych zależności, powinieneś zachować ostrożność, aby uniknąć duplikowania w swoim pakiecie - patrz sekcja Embed-Dependency and Export-Package dokumentacji wtyczki maven-bundle.

+0

Może masz rację ... Sprawdzę następnym razem, kiedy to uderzę. Na razie zdecydowaliśmy się nie korzystać z automatycznie generowanych manifestów. –

5

Należy używać klasy Bundle-ClassPath, jeśli chcesz udostępnić klasy w pakiecie zawierającym pliki JAR, np.

Bundle-ClassPath: foo.jar,other.jar 
Import-Package: org.osgi.framework,org.other.imported 

Musisz listy klas, które foo.jar i other.jar import/używać, ale nie trzeba notować każdy z pakietów w foo.jar lub other.jar chyba ciebie” ponownie je eksportuje.

+0

Dobrze. Problem polega na tym, że maven OSGi plug-in (który jest zbudowany na górze narzędzia bnd) tworzy Import-Package dla każdego pakietu wewnątrz foo.jar i other.jar! –

+0

Możesz skonfigurować bnd, aby nie generować instrukcji importowania dla niektórych pakietów. Możesz również spróbować zgłosić błąd związany z BND dla tego przykładu. – AlBlue

2

Możesz usunąć niektóre pakiety z zakresu import-pakiet po osadzić JAR w swoim zestawie:

<Import-Package>![package_name9]<Import-Package> 

wewnątrz pom.xml lub jeśli używasz zewnętrznych plików * .bnd:

Import-Package: ![package_name]