2012-12-14 11 views
21

Pracuję z OSGi już od jakiegoś czasu, ale nadal nie rozumiem czegoś o pakietach prywatnych.Co dotyczy prywatnych pakietów?

  • Wyeksportowany pakiet jest pakietem o jest widoczne dla innych wiązek
  • Zaimportowana pakiet jest pakietem, który jest sprowadzany przez wiązkę eksportującego pakiet.
  • Pakiet prywatny jest pakiet, który nie jest widoczny dla innych wiązek (nie rozumiem tego)

nie są wszystkie pakiety wiązek, które nie są wywożone niewidoczne dla wszystkich innych pakietów? Jeśli tak, to jaka jest różnica w stosunku do prywatnych pakietów i pakietów, które nie są eksportowane?

Czytałem OSGi w akcji i "OSGi i Apache Felix 3.0 - Podręcznik dla początkujących", ale nie byłem w stanie znaleźć różnicy.

+0

Gdzie dokładnie natknąłeś się na pojęcie "pakietu prywatnego"? Gdzie jest skonfigurowany? Myślę, że nie jest to cecha manifest.mf. –

+2

Zobacz http://stackoverflow.com/questions/13514123/what-does-the-private-package-manifest-header-do również – btiernay

Odpowiedz

14

Tak, wszystkie pakiety nie zdefiniowane w manifeście manifest.mf Export-Package są pakietami prywatnymi. Nie musisz ich określać osobno, to tylko kolejny termin na łatwość komunikacji.

Jeśli masz manifest wygenerowany na przykład przez wtyczkę maven-bundle, ten termin jest nieco bardziej istotny, ponieważ wtyczka maven domyślnie eksportuje wszystkie pakiety, z wyjątkiem na przykład pakietu o nazwie internal (lub podpakiety tego). Jest to podejście odwrotne, ponieważ określasz pakiety prywatne i obliczasz wyeksportowany pakiet. Szczegóły: the maven bundle plugin.

+2

Pakiety, które nie są zawarte w "Pakiecie eksportowym" nie są prywatne, są zakazane. Nie mogą być i nie będą dostępne dla innych pakietów. Z drugiej strony pakiety prywatne MUSZĄ być zawarte w pakiecie "Export-package", ale powinny być używane wewnętrznie w dobrze znanych pakietach, a ich używanie jest w większości przypadków zniechęcane przez kompilator. Jeśli użyjesz ich i uruchomisz OSGi w trybie ścisłym, nie będą one dostępne, jeśli nie zostały wyeksportowane i otrzymasz wyjątek classNotFound. – Behnil

+2

Nie dotyczy to czystego OSGi. [Główna specyfikacja OSGi (R5)] (http://www.osgi.org/Specifications/HomePage) wyraźnie stwierdza (sekcja 3.7.1): _Pakiety, które nie są eksportowane ani importowane, nazywane są pakietami prywatnymi._ – benjamin

+3

Komentarz przez @Bhnil jest niedokładny. Na przykład: "prywatne pakiety muszą być uwzględnione w pakiecie eksportowym" jest wyraźnie błędne, jeśli są uwzględnione w eksporcie, to nie są prywatne! Ponadto, OSGi nie ma czegoś takiego jak "tryb ścisły". –

23

Nie ma różnicy.

Każdy pakiet, który nie jest wymieniony w Export-Package jest prywatny .... to wszystko, co do niego należy.

Użytkownik może widział inny nagłówek o nazwie Private-Package. To NIE jest nagłówek OSGi i jest całkowicie ignorowane przez OSGi Framework. Jeśli zobaczysz to, oznacza to, że pakiet został zbudowany z bnd lub Maven Bundle Plugin, który używa tego nagłówka ma instrukcję czasu kompilacji. Jest to zatem istotne tylko w czasie kompilacji i nie ma żadnego wpływu w czasie wykonywania.

Powiązane problemy