OSGI: Возможно ли импортировать пакет и добавить видимость: = реэкспорт? - PullRequest
2 голосов
/ 16 августа 2010

Я хотел бы импортировать пакет, а не требовать пакет в манифесте, и чтобы все пакеты, для которых требуется предыдущий пакет, наследовали импортированный пакет.Я предполагаю, что возможно установить видимость: reexport, но Eclipse не жалуется, если у меня была эта опция ...

Ответы [ 5 ]

5 голосов
/ 22 августа 2010

Это невозможно и не нужно.Пакет, использующий Import-Package, может просто получить пакет из исходного пакета, который его экспортирует;нет необходимости «маршрутизировать» зависимость через промежуточный пакет.

Это одно из самых больших преимуществ Import-Package: импортирующий пакет не знает и не заботится, какие другие пакеты он получает.с.

4 голосов
/ 17 августа 2010

Вы можете реэкспортировать только при необходимости комплектов.

Import-Package должен быть предпочтительнее, чем Require-Bundle или DynamicImport-Package. Первый действительно необходим, только если вы имеете дело с разделенными пакетами, тогда как последний был предназначен только для ситуаций, в которых вы не знали имя класса заранее (например, SPI-подобные ситуации), хотя его также можно безопасно использовать как необязательное средство для импорта. В общем, вы должны избегать вещей, которые скрывают зависимости (например, широкий динамический импорт) или скрывают их (например, требуют связки). Тот факт, что Require-Bundle поддерживает реэкспорт, является решением, которое никогда не должно было приниматься, и для этой функции нет разумного варианта использования, все это делает ее еще более скрывающей зависимости и создает запутанный беспорядок.

1 голос
/ 17 августа 2010

Нет, реэкспорт пакета невозможен.Для этого вам нужно будет использовать пакет или другую стратегию загрузки классов.

0 голосов
/ 20 августа 2010

Мне явно не хватает ссылки "Ответить на комментарий", так что простите, что я отвечаю на вопрос в комментариях здесь ...

Находитесь ли вы в «иерархии» или нет, на самом деле не имеет значения. Первые пакеты используются в разных контекстах, поэтому они не всегда будут использоваться в контейнере, который знает, что он хочет. Во-вторых, пакет все еще не использует все доступное ему в «иерархии», поэтому его действие просто приводит к разветвлению зависимости, поскольку реальные зависимости скрыты.

0 голосов
/ 16 августа 2010

Я не уверен, в чем твоя проблема. Если вы не хотите запрашивать комплект, вам нужно импортировать все необходимые вам пакеты. Для создания этого списка вы можете использовать maven-bundle-plugin (для проектов maven). Если вы не хотите создавать конкретный список необходимых импортов, попробуйте

DynamicImport-Package: *

, который должен импортировать необходимые пакеты по требованию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...