Какая сделка с частными пакетами?
Я работаю с OSGi некоторое время, но я все еще ничего не понимаю о частных пакетах.
- Экспортированный пакет - это пакет с видимым для других пакетов
- Импортированный пакет - это пакет, который импортируется пакетом, экспортирующим пакет.
- Частный пакет - это пакет, который не отображается в других пакетах (я не понимаю)
Не все ли пакеты пакетов, которые не экспортируются, невидимы для всех других пакетов? Если да, то какая разница с частными пакетами и пакетами, которые не экспортируются?
Я прочитал OSGi в действии и "OSGi и Apache Felix 3.0 - Руководство для начинающих", но я не смог найти разницу.
Ответы
Ответ 1
Да, все пакеты, не определенные в записи manifest.mf Export-Package
, являются частными пакетами. Вам не нужно указывать их отдельно, это просто еще один термин для удобства общения.
Если у вас есть манифест, сгенерированный, например, с помощью модуля maven-bundle-plugin, этот термин становится немного более актуальным, потому что плагин maven bundle будет по умолчанию экспортировать все пакеты, за исключением, например, пакета с именем internal
( или подпакеты из этого). Это как-то обратный подход, поскольку вы указываете частные пакеты и рассчитываете экспортированный пакет. Подробнее см. плагин maven bundle.
Ответ 2
Нет разницы.
Любой пакет, который не указан в Export-Package
, является приватным.... что все есть.
Возможно, вы видели другой заголовок с именем Private-Package
. Это НЕ заголовок OSGi, и OSGi Framework полностью игнорируется. Если вы видите это, это означает, что пакет был создан с помощью bnd или Maven Bundle Plugin, который использует этот заголовок, имеет инструкцию build-time. Поэтому он имеет значение только во время сборки и не имеет никакого эффекта во время выполнения.