Я хочу сделать следующее решение: 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)
Как это исправить? Я установил и начал сварку и сварку, но это не помогло.
Я очень удивлен, что вы получили где-то только 10 пакетов, экспортируемых системным пакетом. Как насчет всех остальных пакетов JavaSE? –
@Neil Bartlett Я не понимаю вас. Мне нужны эти пакеты, чтобы запустить приветственный пример. Кажется, их достаточно. –
Они могут казаться достаточно изначально, но что, если вы добавите больше функциональности? В любом случае, я не совсем понимаю, что вы делаете, потому что Феликс уже предоставляет пакет, который вам нужен ... –