2014-11-17 2 views
0

Я развернул несколько пакетов в мой контейнер Karaf. Graf зависимости может выглядеть таким образомВариант конфигурации, зависящий от конфигурации Karaf без перекомпилирования или загрузки пакета

A-1.0 
    /\ 
    / \ 
B-1.0 C-1.0 

Оба B и C расслоение ищет новую версию расслоения А. После развертывания производства я понял, что некоторые интерфейсы в расслоении А должен изменились. Я бы хотел, чтобы только обвязка B знала об этом изменении. Пакет C должен оставаться таким, какой он есть. График будет лучше, чем мой английский.

Я хотел бы дружнее что-то вроде:

A-1.1 A-1.0 
    |  | 
B-1.1 C-1.0 

Я интересно, есть что-то вроде внешнего файла конфигурации, который может помочь или что-то лучше, может быть.

ответ

2

Если вы не используете Require-Bundle (который, как правило, не следует делать), пакеты не зависят от комплектов. Это пакеты, которые зависят от других пакетов. Поэтому для остальной части моего ответа я собираюсь предположить, что ваши пакеты B и C импортируют какой-то пакет от A.

Первый вопрос: какой диапазон версий они импортируют?

Если оба из них импортируют [1.0, 2) (что довольно нормально, если они потребляют услуги от A), то вы не достигнете эффекта, который вы описываете.

Вы можете сделать C импортировать строгий диапазон, например [1.0, 1.1), и тогда ваш сценарий будет работать.

Мне действительно интересно, почему вы хотите делать то, что вы описали. Если вы правильно применяете семантическое управление версиями (как предлагается в техническом документе OSGi), то обновление от 1.0 до 1.1 пакета A означает, что оно должно быть обратно совместимым. Поэтому B и C могут использовать A версию 1.1 без каких-либо проблем. Можете ли вы подробнее рассказать об этом?

+0

Все комплекты разработаны одновременно. Основная проблема заключается в том, что я пока не могу коснуться pacakge C (внешние службы зависят от нее). На данный момент я добавил новый метод для интерфейса и отметю старый с устаревшей аннотацией. Но в некоторых случаях изменения могут быть более сложными (A-1.1 предоставляется логика, которая не обрабатывается пакетом C-1.0, а будет C-1.1). Мне просто интересно, могу ли я использовать некоторую внешнюю конфигурацию, чтобы сообщить контейнеру, что пакет C-1.0 теперь идет с пакетом A-1.0. В ближайшее время я предоставил новую версию пакета C-1.1, которая будет реорганизована для использования pacakge A-1.1. – Damian0o