2013-06-26 3 views
2

Adobe CQ5 설치에서 servlet-api 버전 3을 사용하려고하는데 많은 성공을 거두지 못했습니다.servlet-api 3 번들을 사용하여 adobe CQ5에

javax.servlet 패키지 (버전 2.5)를 내보내는 번들이 이미 있으므로 3.1.0 버전의 번들을 배포했습니다. 이 번들은 괜찮습니다.

문제는 api v3를 사용하는 번들을 시작하는 중입니다. 나는 완전히 이해 할 수없는 OSGi 프레임 예외 점점 오전 :

POST/시스템/콘솔/번들/250 HTTP/1.1] cqse - HTTPService를 % bundles.pluginTitle : (org.osgi.framework.BundleException를 시작할 수 없습니다 :

제약 위반 [250.9] 패키지 비난 기존 수입 266.0.javax.servlet

사이 모듈 250.9 해결 패키지 '에서 javax.servlet'대 (& (= 패키지에서 javax.servlet) (버전> = 3.0.0) (! (버전> = 4.0.0)))]

및 constr aint 22.1.javax.servlet

BLAMED ON [[250.9] package; (package = com.day.cq.wcm.foundation.forms), [210.0] 패키지; (& (패키지 = org.apache.sling.api.resource) (버전> = 2.0.0)), [93.0] 패키지; (& (= 패키지에서 javax.servlet) (버전> = 2.4.0))) = 3.10 (I이 한 설치에서 javax.servlet V

  • 번들 수출 266)
  • 번들 22 개 javax의 수출 .servlet v = 2.5 (CQ5에서 제공)
  • 번들 250 (광산)은 266에서 javax.servlet, version = [3.0,4]을 가져옵니다.
  • 번들210 가져 오기 javax. servelt v = 22 from 22 (하지만 매니페스트에서 가져온 항목에는 버전이 없습니다. 아마도 이것이 문제일까요?)
  • 번들 93에는 javax.servlet이 있습니다. version = "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을 읽은 후, 내 번들의 종속성이 서블릿 API 2.5의 클래스를 노출한다는 사실을 발견했습니다. 이로 인해 제약이 발생하고 내 번들을 막을 수 있습니다. 번들 210의 클래스 경로가 올바르게 이해되면 내 번들로 확장됩니다.

그래서 유일한 번들은 다른 번들과 내 번들의 종속성을 제거하는 것입니다.V3 api없이 처리해야 할 것입니다

0

이것은 사용 된 http-service가 서블릿 2.5 만 지원하므로 이것이 사전 설치된 서블릿 버전 인 이유 일 가능성이 큽니다. 서블릿 3.0 API를 설치 했으므로 번들은 해결되지만 http 서비스에 의해 선택되는 서비스를 내보내려고하면이 문제가 발생합니다. 근본 원인은 사용되는 http-service 구현입니다. 이것이 작동하는지 모르겠지만 대신 Pax-Web 2 또는 3을 사용하여 http 서비스 버전을 교체하려고 할 수 있습니다. Pax-Web은 버전 2 이후 Servlet API를 지원합니다.

+0

@Moch Daear가 논평 한 것에 문제가 있다는 것에 두려워합니다. http 서블릿의 일부 클래스는 번들의 API에 의해 노출되므로 종속성에는 버전 2.5가 필요합니다. – santiagozky