【发布时间】:2013-06-23 07:47:06
【问题描述】:
我正在尝试在 Adobe CQ5 安装中使用 servlet-api 版本 3,但没有取得多大成功。
已经有一个包导出 javax.servlet 包(版本 2.5),所以我部署了一个版本为 3.1.0 的包。此捆绑包启动正常。
问题在于启动使用 api v3 的包。我遇到了一个我无法完全理解的 OSGi 异常:
POST /system/console/bundles/250 HTTP/1.1] cqse-httpservice %bundles.pluginTitle:无法启动(org.osgi.framework.BundleException:
在现有导入 266.0.javax.servlet 之间解析模块 250.9 时包“javax.servlet”的约束冲突
指责 [[250.9] 包; (&(package=javax.servlet)(version>=3.0.0)(!(version>=4.0.0)))]
并使用约束 22.1.javax.servlet
指责 [[250.9] 包; (package=com.day.cq.wcm.foundation.forms), [210.0] 包; (&(package=org.apache.sling.api.resource)(version>=2.0.0)), [93.0] 包裹; (&(package=javax.servlet)(version>=2.4.0))])
- bundle 266 导出 javax.servlet v=3.10(我安装了这个)
- bundle 22 导出 javax.servlet v=2.5(由 CQ5 提供)
- bundle 250 (mine) 从 266 导入 javax.servlet,version=[3.0,4)。它还从 210 和 93 导入包。
- bundle 210 从 22 导入 javax.servelt v=2.5(但清单中的导入没有版本。也许这是问题所在?)
- bundle 93 有 javax.servlet;导入包中的 version="2.4"。但它以某种方式从 (22) 解析为 javax.servlet,version=2.5.0。
问题似乎与捆绑包 250 的依赖关系有关,但我不确定是什么问题。 AFAIK 两个版本的包可以共存于一个 OSGi 容器中。捆绑包 210 和 93 运行正常。
【问题讨论】:
-
这篇文章深入阐述了什么是违反使用约束以及为什么它很难追踪。 njbartlett.name/2011/02/09/uses-constraints.html 希望能帮助您找到问题。