OSGi Service упаковка в банку - PullRequest
0 голосов
/ 18 апреля 2009

Я пытаюсь создать службу OSGi, которая оборачивает другую банку. Я добавил банку в проект, путь к классам и двоичную сборку. Я зарегистрировал сервис в Активаторе, но когда вызывающий пакет вызывает сервис, я получаю java.lang.NoClassDefFoundError на банке-обертке. Кто-нибудь знает, что я здесь делаю неправильно?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 20 апреля 2009

Вы экспортируете пакеты, которые требуются потребителю, а также все те, которые требуются для реализации. Потребителю нужно будет импортировать все, на что будет ссылаться.

В качестве дополнительного примечания, создание пакета таким способом не работает в Eclipse для разработки (отлично работает для среды выполнения). Если вы попытаетесь сослаться на класс или интерфейс в банке из другого проекта OSGi, среда IDE не разрешит ничего, так как не сможет «увидеть» файлы в банке. Банку нужно развернуть в комплекте, чтобы все было видно (в среде IDE). Eclipse автоматически создает соответствующие ссылки на пути к классам на основе импорта и экспорта в целях построения. Без файла jar в комплекте вам придется явно поддерживать этот путь к классам.

1 голос
/ 18 апреля 2009

Причин вашего поведения может быть несколько. Чтобы убедиться, я бы проверил следующее:

  • при условии, что вы работаете с проверкой Eclipse, если вы включили jar во вкладку «Build» редактора манифеста, а также указали на этот самый jar на вкладке «Runtime» в «Classpath».

  • созданный комплект: в нем есть банка? Имеет ли он заголовок «Bundle-ClassPath», указывающий на jar, например: «Bundle-ClassPath: lib / myLibrary.jar,». (последнее. Требуется включить классы из корневого каталога пакета - ваш активатор f.i.)

  • убедитесь, что jar фактически содержит все необходимые зависимости или выражает их через заголовки Import-Package в пакете упаковки. Eclipse имеет «Мастер импорта» только для этого. Кстати, упомянутый выше инструмент bnd делает то же самое. Надеюсь, это поможет ...

0 голосов
/ 18 апреля 2009

Вы использовали Bundle-Classpath в манифесте? Почему вы не используете bnd для существующего фляги?

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