Запуск пакета OSGI из командной строки OSGI: ограничение импорта пакета отсутствует

У меня есть пакет со следующим mainfest:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: HelloCamera
Bundle-SymbolicName: HelloCamera
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: hellocamera.Activator
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: cameraservice, cameraserviceimpl, org.osgi.framework

Layout:
    HelloCamera
       -> hellocamera
            -> Activator.java

И второй пакет с этим манифестом:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: CameraService
Bundle-SymbolicName: CameraService
Bundle-Version: 1.0.0.qualifier
Bundle-Localization: plugin
Export-Package: cameraservice, cameraserviceimpl
Import-Package: org.osgi.framework
Bundle-Activator: cameraserviceimpl.Activator

Layout:
    CameraService
       -> cameraservice
            -> CameraService.java
       -> cameraserviceimpl
            -> Activator.java 
            -> CameraServiceImpl.java

Я могу запустить первый пакет из Eclipse, и все работает нормально, как и ожидалось. Затем я экспортировал оба пакета как CameraService.jar и HelloCamera.jar соответственно.

Я открыл консоль OSGI, java -jar equinox.jar -console и

osgi> install file:CameraService.jar
osgi> install file:HelloCamera.jar
osgi> ss
           id    State         Bundle
           17   INSTALLED      HelloCamera_1.0.0.qualifier
           18   RESOLVED       unknown_0.0.0 [18]

тогда я получаю

The Bundle could not be resolved. Reason: Missing Constraint: Import-Package: cameraservice; version="0.0.0"

person cxzp    schedule 02.09.2013    source источник
comment
Что значит, что вы экспортировали оба пакета как jar? Один jar, один пучок.   -  person chrylis -cautiouslyoptimistic-    schedule 02.09.2013
comment
@chrylis я пытался экспортировать их вместе как один пакет и как два отдельных пакета   -  person cxzp    schedule 02.09.2013
comment
Пожалуйста, опубликуйте свой манифест из пакета two-jar. (Скопировав его из zip-файла, а не из Eclipse.)   -  person chrylis -cautiouslyoptimistic-    schedule 02.09.2013
comment
@chrylis, как мне получить майфест из файла jar?   -  person cxzp    schedule 02.09.2013
comment
Откройте jar в архиваторе (например, WinZip) или используйте jar -xf Test.jar META-INF/MANIFEST.MF.   -  person chrylis -cautiouslyoptimistic-    schedule 02.09.2013
comment
@chrylis добавил это, так как вы можете видеть, что импорта там нет: / Я предполагаю, что это является причиной проблемы, есть идеи, как это исправить?   -  person cxzp    schedule 02.09.2013
comment
Да, не пытайтесь впихнуть два бандла в один jar файл! Экспортируйте каждый пакет как jar, а затем импортируйте их вместе или в правильном порядке.   -  person chrylis -cautiouslyoptimistic-    schedule 02.09.2013
comment
@chrylis, он все еще не работает, выдавая ту же ошибку: см. обновленный код ^ с выводом OSGI   -  person cxzp    schedule 02.09.2013
comment
Во втором пакете есть что-то очень подозрительное. Почему OSGi сообщает, что проблема решена, но не знает ее названия? Я думаю, что, вероятно, файл JAR поврежден или манифест недействителен.   -  person Neil Bartlett    schedule 02.09.2013


Ответы (1)


После поиска

Я обнаружил, что проблема была с файлами манифеста. При экспорте банок в моих настройках я сказал использовать файл манифеста уже в папке.

Я никогда не смотрел, на что указывает путь (при условии, что eclipse установит его правильно), однако Eclipse не изменил свое местоположение, поэтому обе банки использовали один и тот же файл манифеста.

Урок выучен. Всегда проверяйте форму, прежде чем слепо нажать «Готово».

person cxzp    schedule 02.09.2013
comment
Похоже, вы создаете свои пакеты очень ручным и подверженным ошибкам способом. Почему бы не изучить использование подходящих инструментов, таких как bnd и Bndtools? - person Neil Bartlett; 03.09.2013