Планируется ли поддержка "Require-Bundle" в maven-bundle-plugin, даже если это не рекомендуется для OSGi. Бывают ситуации, когда имеет смысл использовать «Require-Bundle», например, для объединения разделенных пакетов.
Планы по поддержке Require-Bundle в maven-bundle-plugin
Ответы (2)
Require-Bundle
поддерживается подключаемым модулем пакета, как и все заголовки OSGi, а также любые другие произвольные заголовки, которые вы хотите использовать. Просто напишите их в XML:
<Require-Bundle>
org.example.foo; bundle-version=3.0,
org.example.bar; bundle-version=1.0
</Require-Bundle>
<My-Extension-Header>
blah blah blah
</My-Extension-Header>
person
Neil Bartlett
schedule
24.12.2014
Вы можете указать заголовок Require-Bundle MANIFEST в инструкциях. Например.:
<instructions>
<Require-Bundle>a.b.c</Require-Bundle>
</instructions>
Однако диапазон версий требуемого пакета не будет добавлен автоматически, поэтому при необходимости вы должны указать его вручную.
person
Balazs Zsoldos
schedule
22.12.2014
Но зависимости не разрешаются автоматически, поскольку это не работает с шаблоном пакета импорта *. Верно?
- person user1654885; 22.12.2014
В случае разделенных пакетов имеет значение порядок пакетов в Require-Bundle. Bnd не может автоматически решить, какой пакет должен быть первым в порядке. Кроме того, bnd должен анализировать каждый вызов метода, чтобы решить, достаточно ли импортировать пакет, поскольку он используется только из одного пакета или необходимо использование Require-Bundle. Поскольку это слишком сложный вопрос, где некоторые ответы не могут быть предоставлены автоматически (например, порядок пакетов), вы должны поддерживать этот ЗАГОЛОВОК вручную. Однако лучше всего полностью избегать использования Require-Bundle.
- person Balazs Zsoldos; 22.12.2014
Спасибо за Ваш ответ. Но разве с импортом не то же самое? Порядок имеет еще большее значение, а вы вообще не можете объединять пакеты ?! Я также не понимаю, почему порядок важен для require-bundle
- person user1654885; 22.12.2014
Порядок не имеет значения в Import-Package, поскольку один и тот же пакет (с другой версией) не может быть импортирован дважды. С помощью Require-Bundle один и тот же пакет можно импортировать из нескольких пакетов, и эти пакеты могут содержать одни и те же классы. В этом случае порядок имеет значение при поиске класса. Если у вас есть зависимости, и несколько зависимостей содержат один и тот же пакет, bnd берет первый и сгенерирует Import-Package на его основе. Если бы он хотел сгенерировать Require-Bundle, он не знал бы, следует ли использовать Require-Bundle или Import-Package в этом случае.
- person Balazs Zsoldos; 22.12.2014