我正在尝试在 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)(版本>=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 运行时没有问题。