我正在尝试在Adobe CQ5安装中使用servlet-api版本3,但没有太大成功。
已经有一个包导出javax.servlet包(版本2.5),所以我部署了一个3.1.0版本的包。这个捆绑包开始了。
问题是启动使用api v3的bundle。我得到了一个我无法完全理解的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'的约束违例
BLAMED ON [[250.9]包裹; (及(包=的javax.servlet)(版本> = 3.0.0)((版本>!= 4.0.0)))]
并使用约束22.1.javax.servlet
BLAMED ON [[250.9]包裹; (package = com.day.cq.wcm.foundation.forms),[210.0] package; (&(package = org.apache.sling.api.resource)(version> = 2.0.0)),[93.0] 包; (及(包=的javax.servlet)(版本> = 2.4.0))])
问题似乎是围绕捆绑250的依赖性,但我不确定是什么问题。 AFAIK包的两个版本可以在OSGi容器中共存。捆绑包210和93正在运行而没有问题。
答案 0 :(得分:0)
这很可能是由于使用的http服务仅支持servlet 2.5,这就是为什么这是预安装的servlet版本。由于您安装了一个servlet 3.0 api,您的软件包确实解决了,但是当它尝试导出由http服务选择的服务时,您会遇到此问题。根本原因是使用的http服务实现。我不知道这是否可行,但您可能会尝试使用Pax-Web 2或3替换http服务版本。从版本2开始,Pax-Web确实支持Servlet API。
答案 1 :(得分:0)
在阅读评论中留下的article之后,我注意到我的bundle的依赖关系暴露了servlet api 2.5的类。这会导致约束并阻止我的捆绑。如果我理解正确,来自包210的类路径将扩展到我的包。
所以,唯一的选择是删除我的捆绑包与其他捆绑包的依赖关系,我恐怕不能这样做。我将不得不在没有V3 api的情况下进行交易