在Adobe CQ5中使用servlet-api 3包CQ5

问题描述:

我想在Adobe CQ5安装中使用servlet-api版本3,但没有取得太大的成功。在Adobe CQ5中使用servlet-api 3包CQ5

已经有一个导出javax.servlet包(版本2.5)的包,所以我部署了一个包含版本3.1.0的包。这个包开始OK。

问题是启动使用api v3的软件包。我得到一个OSGi例外,我不能完全理解:

POST /系统/控制台/包/ 250 HTTP/1.1] cqse-的HTTPService%bundles.pluginTitle:无法启动(org.osgi.framework.BundleException:

约束违反为包 '的javax.servlet' 现有进口266.0.javax.servlet

归咎于[[250.9]包之间解析模块250.9时;(&(包=的javax.servlet)(版本> = 3.0.0)(!(version> = 4.0.0)))]

and uses constr aint 22.1.javax.servlet

BLAMED ON [[250.9] package; (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))])

  • 束266出口的javax.servlet V = 3.10(I安装此一)
  • 束22周的出口的javax .servlet v = 2.5(由CQ5提供)
  • 束250(矿)进口的javax.servlet,版本= [3.0,4)从266.它还出口包210和93
  • 束210进口的javax。 servelt v = 2.5 from 22(但是在清单中导入没有版本,也许这是问题?)
  • bundle 93 has javax.servlet;导入包中的版本=“2.4”。但它以某种方式从(22)中解析为javax.servlet,version = 2.5.0。

该问题似乎是围绕捆绑250的依赖关系,但林不知道是什么问题。 AFAIK包的两个版本可以共存于一个OSGi容器中。捆绑210和93运行没有问题。

+3

本文列举了深入的使用违反约束是什么,为什么它可以是难以追查。 http://njbartlett.name/2011/02/09/uses-constraints.html希望帮助您跟踪您的问题。 –

在阅读留在注释中的article之后,我注意到我的bundle的依赖关系暴露了servlet api 2.5的类。这造成了约束并阻止了我的包。如果我理解正确,则来自捆绑包210的类路径将扩展到我的捆绑包。

所以,唯一的选择是删除我的包与其他包的依赖关系,这恐怕是我不能做的。我将不得不面对没有V3 API

这很可能是由于所使用的http服务仅支持servlet 2.5这就是为什么这是预先安装的servlet版本。由于您安装了servlet 3.0 api,因此您的捆绑软件会解析,但是它会尝试导出由您遇到此问题的http服务拾取的服务。根本原因是使用的http服务实现。我不知道这是否可行,但您可以尝试使用Pax-Web 2或3替换http服务版本。 Pax-Web自版本2开始支持Servlet API。

+0

恐怕问题就出在什么@Moch Daear评论。在HTTP Servlet中的一些类是由包的API公开的,所以它们的依赖需要2.5版。 – santiagozky