Когда у меня есть 2 пакета OSGi, в которых используется один и тот же jar, нужен ли этот jar в каждом пакете или достаточно одного? - PullRequest
2 голосов
/ 14 марта 2012

Например, пакет 'A' и пакет 'B' используют log4j.Можем ли мы иметь только один log4j?или необходимо иметь log4j внутри каждого пакета?

Ответы [ 5 ]

5 голосов
/ 14 марта 2012

Пакет 'B' может использовать log4j в пакете 'A', если пакет 'A' экспортирует пакеты log4j, а пакет 'B' импортирует их.

На самом деле лучше вместо этого использовать log4j bundle (log4j 1.2.16 является OSGi-совместимым выпуском), а затем «A» и «B» импортируют его.Вы можете просмотреть log4j.jar, который я связал, и увидеть, что в нем есть записи манифеста OSGi.

3 голосов
/ 14 марта 2012

Я согласен с тем, что сказали другие. Это не только возможно иметь только одну копию jar log4j, это очень желательно. Избегание такого рода дублирования jar-файлов - один из основных вариантов использования OSGi. Вместо защитной упаковки библиотек внутри пакетов, чтобы гарантировать, что они находятся в пути к классам, каждый пакет может явно объявить зависимость от пакетов библиотеки - в данном случае log4j. Это позволяет избежать раздувания, а также значительно упрощает обновление общей библиотеки, если это необходимо.

0 голосов
/ 15 марта 2013

Дев дал вам ответ.Идея OSGi состоит в том, чтобы иметь возможность делиться вещами с минимальными зависимостями между пакетами.

  • Если у вас есть log4j в обоих пакетах, вы фактически теряете все преимущества OSGi.
  • Если у вас есть log4j только в одном пакете, например: Пакет A, вы делаете прямую зависимость между пакетами A и B, так как B всегда будет нуждаться в A для работы.Если A по какой-либо причине остановлен, B. работать не будет.
  • Если вы создадите новый пакет "Bundle_Log4j" и объявите A и B для импорта его пакетов, вы сможете работать с Bundle Aи Связка B независимо, так что это идеальное решение.
0 голосов
/ 15 марта 2013

Вся идея OSGi в том, чтобы иметь возможность делиться ...

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

0 голосов
/ 14 марта 2012

Если вы разделяете пакет, у него будет только одно глобальное состояние (статические поля и т. Д.).

Обычно вы можете повторно использовать log4j, но если вы хотите, чтобы пакет находился на уровне DEBUG для одного приложения иИНФОРМАЦИЯ в другом, вам нужно поддерживать два пакета.

...