2015-04-12 4 views
0

Я хочу сделать следующее решение: Apache Felix + Weld для Java SE. Для этого я хочу запустить один из примеров из архива сварки - сварку-osgi-paint. На данный момент у меня есть следующий список: bunleApache felix и org.osgi для сварки cdi - ограничение ограничения

cdi-api.jar 
ops4j-base-lang-1.5.0.jar 
pax-swissbox-core-1.8.0.jar 
weld-osgi-paint-core.jar 
org.apache.felix.scr-1.8.2.jar 
pax-swissbox-lifecycle-1.8.0.jar 
weld-osgi-paint-square.jar 
javax.annotation-api-1.2.jar 
org.apache.servicemix.bundles.javax-inject-1_2.jar 
pax-swissbox-tracker-1.8.0.jar 
weld-osgi-paint-triangle.jar 
javax.el-api-2.2.4.jar 
pax-cdi-api-0.11.0.jar 
slf4j-api-1.7.6.jar 
xbean-bundleutils-4.1.jar 
javax.interceptor-api-1.2.jar 
pax-cdi-extension-0.11.0.jar 
slf4j-log4j12-1.7.2.jar 
log4j-1.2.17.jar 
pax-cdi-spi-0.11.0.jar 
weld-osgi-paint-api.jar 
org.osgi.compendium-4.3.1.jar 
org.osgi.core-4.3.1.jar 

И я получаю следующее:

org.osgi.framework.BundleException: Использует нарушение ограничения. Не удалось , чтобы разрешить ревизию пакета org.ops4j.pax.cdi.extension [9.0], потому что подвергается пакету «org.osgi.framework» пакета от ревизий пакетов org.apache.felix.framework [0] и osgi.core [2.0] через две зависимости цепей.

Chain 1: org.ops4j.pax.cdi.extension [9,0] импорта: (& (osgi.wiring.package = org.osgi.framework) (версия> = 1.7.0) ((версия> = 2.0.0))) | экспорт: osgi.wiring.package = org.osgi.framework org.apache.felix.framework [0]

Цепь 2: org.ops4j.pax.cdi.extension [9,0] импорта: (& (OSGi .wiring.package = org.osgi.util.tracker) (версия> = 1.5.0) (! (версия> = 2.0.0))) | export: osgi.wiring.package = org.osgi.util.tracker; использует: = org.osgi.framework osgi.cmpn [3.0] импорт: (osgi.wiring.package = org.osgi.framework) | экспорт: osgi.wiring.package = org.osgi.framework osgi.core [2,0]

и это

... Вызванный: java.lang.ClassCastException: org.apache .felix.scr.impl.Activator не может быть приведен к org.osgi.framework.BundleActivator на org.apache.felix.framework.Felix.createBundleActivator (Felix.java:4177)

проблема, как Я понимаю, что pax cdi ne eds org.osgi, и он не работает с apache felix. Как решить такую ​​проблему?

EDIT 1
Whem Я не устанавливаю org.osgi.core у меня есть следующее исключение, так как org.osgi.service.packageadmin в org.osgi.core.

org.osgi.framework.BundleException: Нерешенные ограничение в пучке org.ops4j.pax.cdi.extension [8]: Не удается решить проблему 8.0: отсутствует требование [8.0] osgi.wiring.package; (& (osgi.wiring.package = org.ops4j.pax.cdi.spi) (версия> = 0.11.0) (! (Версия> = 1.0.0))) [вызвано: Не удалось разрешить 9.0: недостающее требование [9.0] osgi.wiring.package; (& (osgi.wiring.package = org.apache.xbean.osgi.bundle.util) (версия> = 3.18.0) (! (Версия> = 5.0.0))) [вызвано: Не удалось решить 16.0: недостающее требование [16.0] osgi.wiring.package; (& (osgi.wiring.package = org.osgi.service.packageadmin) (версия> = 1.2.0) (! (Версия> = 2.0.0)))]] по адресу org.apache.felix.framework .Felix.resolveBundleRevision (Felix.java: 3826) at org.apache.felix.framework.Felix.startBundle (Felix.java:1868) по адресу org.apache.felix.framework.BundleImpl.start (BundleImpl.java:944) по адресу org.apache. felix.framework.BundleImpl.start (BundleImpl.java:931) по адресу com.techsenger.launcher.core.se.all.Launcher.startBundles (Launcher.java:146) at com.techsenger.launcher.core.se .all.Launcher.main (Launcher.java:60)

EDIT 2
Я не говорил, я использую org.apache.felix.framework-4.0.3.jar. Я решил проблему, удалив пакет org.osgi.core, как сказал Кристиан Шнайдер. После этого я добавил необходимые пакеты для системных пакетов так:

String SYSTEM_PACKAGES = 
     "org.osgi.framework;version=\"1.8\"," + 
     "org.osgi.service.packageadmin;version=\"1.8\","+ 
     "org.osgi.framework.wiring;version=\"1.8\","+ 
     "javax.swing,javax.management,javax.naming,javax.xml.parsers,"+ 
     "org.w3c.dom,org.xml.sax,org.xml.sax.helpers"; 
     configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES, SYSTEM_PACKAGES); 

Кроме того, я должен был взять версию 0.8.0 Пакс-cdi- * и некоторые другие. И это то, что я получил:

org.osgi.framework.BundleException: Нерешенные ограничение в пачке org.jboss.weld.examples.weld-OSGi-краска-ядро [23]: Не удается разрешить 23,0 : отсутствует требование [23.0] osgi.extender; (osgi.extender = pax.cdi) в org.apache.felix.framework.Felix.resolveBundleRevision (Felix.java:3826) at org.apache.felix.framework.Felix.startBundle (Felix.java:1868) at org.apache.felix.framework.BundleImpl.start (BundleImpl.java:944) в org.apache.felix.framework.BundleImpl.start (BundleImpl.java:931)

Как это исправить? Я установил и начал сварку и сварку, но это не помогло.

+0

Я очень удивлен, что вы получили где-то только 10 пакетов, экспортируемых системным пакетом. Как насчет всех остальных пакетов JavaSE? –

+0

@Neil Bartlett Я не понимаю вас. Мне нужны эти пакеты, чтобы запустить приветственный пример. Кажется, их достаточно. –

+0

Они могут казаться достаточно изначально, но что, если вы добавите больше функциональности? В любом случае, я не совсем понимаю, что вы делаете, потому что Феликс уже предоставляет пакет, который вам нужен ... –

ответ

3

Проблема в том, что установлен org.osgi.core. Пакеты, предоставляемые этой банкой, также предоставляются фельхсом. Поэтому просто не устанавливайте банку thecorg.osgi.core.

Вам также необходимо установить пакеты pd cdi. Сам сварка не обеспечивает поддержку osgi, необходимую для cdi.

+0

Спасибо за ваше время. См. Edit 1 в моем вопросе. –

+0

В ответ на редактирование ... 'org.osgi.service.packageadmin' экспортируется Felix, поэтому вам не нужно получать его из другого пакета. Однако вы не указали, какую версию Felix вы используете. Импорт из вашего пакета требует как минимум версии 1.2 этого пакета. Все версии Felix с 4.0 и выше предоставляют версию 1.2 'org.osgi.service.packageadmin', поэтому похоже, что вы используете что-то довольно старое. –

+0

@Neil Bartlett Спасибо за ваше время. Пожалуйста, см. Edit2 –