2013-06-26 32 views
2

我想在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希望幫助您跟蹤您的問題。 –

回答

0

在閱讀留在註釋中的article之後,我注意到我的bundle的依賴關係暴露了servlet api 2.5的類。這造成了約束並阻止了我的包。如果我理解正確,則來自捆綁包210的類路徑將擴展到我的捆綁包。

所以,唯一的選擇是刪除我的包與其他包的依賴關係,這恐怕是我不能做的。我將不得不面對沒有V3 API

0

這很可能是由於所使用的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