gpt4 book ai didi

java - Apache felix 和 org.osgi 用于 Weld cdi - 违反约束

转载 作者:行者123 更新时间:2023-12-01 22:21:43 25 4
gpt4 key购买 nike

我想做以下解决方案:Apache Felix + Weld for Java SE。为此,我想运行 Weld 存档中的示例之一 - Weld -osgi-paint。现在我有以下捆绑列表:

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: Uses constraint violation. Unable to resolve bundle revision org.ops4j.pax.cdi.extension [9.0] because it is exposed to package 'org.osgi.framework' from bundle revisions org.apache.felix.framework [0] and osgi.core [2.0] via two dependency chains.

Chain 1: org.ops4j.pax.cdi.extension [9.0] import: (&(osgi.wiring.package=org.osgi.framework)(version>=1.7.0)(!(version>=2.0.0))) | export: osgi.wiring.package=org.osgi.framework org.apache.felix.framework [0]

Chain 2: org.ops4j.pax.cdi.extension [9.0] import: (&(osgi.wiring.package=org.osgi.util.tracker)(version>=1.5.0)(!(version>=2.0.0))) | export: osgi.wiring.package=org.osgi.util.tracker; uses:=org.osgi.framework osgi.cmpn [3.0] import: (osgi.wiring.package=org.osgi.framework) | export: osgi.wiring.package=org.osgi.framework osgi.core [2.0]

还有这个

... Caused by: java.lang.ClassCastException: org.apache.felix.scr.impl.Activator cannot be cast to org.osgi.framework.BundleActivator at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:4177)

据我了解,问题是 pax cdi 需要 org.osgi 并且它不适用于 apache felix。如何解决这样的问题?

编辑1
如果我不安装 org.osgi.core,则会出现以下异常,因为 org.osgi.service.packageadmin 位于 org.osgi.core 中。

org.osgi.framework.BundleException: Unresolved constraint in bundle org.ops4j.pax.cdi.extension [8]: Unable to resolve 8.0: missing requirement [8.0] osgi.wiring.package; (&(osgi.wiring.package=org.ops4j.pax.cdi.spi)(version>=0.11.0)(!(version>=1.0.0))) [caused by: Unable to resolve 9.0: missing requirement [9.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.xbean.osgi.bundle.util)(version>=3.18.0)(!(version>=5.0.0))) [caused by: Unable to resolve 16.0: missing requirement [16.0] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.service.packageadmin)(version>=1.2.0)(!(version>=2.0.0)))]] at 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) at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:931) at com.techsenger.launcher.core.se.all.Launcher.startBundles(Launcher.java:146) at com.techsenger.launcher.core.se.all.Launcher.main(Launcher.java:60)

编辑2
我没有说我使用org.apache.felix.framework-4.0.3.jar。正如 Christian Schneider 所说,我通过删除 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 版的 pax-cdi-* 和其他一些版本。这就是我得到的:

org.osgi.framework.BundleException: Unresolved constraint in bundle org.jboss.weld.examples.weld-osgi-paint-core [23]: Unable to resolve 23.0: missing requirement [23.0] osgi.extender; (osgi.extender=pax.cdi) at 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) at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:931)

如何解决?我安装并启动了weld-se和weld-se-core,但没有帮助。

最佳答案

问题是 org.osgi.core 已安装。这个jar提供的包也是felix框架提供的。所以干脆不要安装 thecorg.osgi.core jar。

您还需要安装 pax cdi bundle 。 Weld 本身不提供 cdi 所需的 osgi 支持。

关于java - Apache felix 和 org.osgi 用于 Weld cdi - 违反约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29592181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com