разрешение двух цепочек зависимостей в FuseESB и Jersey Servlet - PullRequest
4 голосов
/ 14 февраля 2012

Я пытаюсь развернуть сервлет Jersey в FuseESB (на основе apache serviceMix), но я получаю следующую ошибку:

Error executing command: Unable to resolve module com.temp.myappserver [248.4] because it is exposed to package 'javax.ws.rs' from org.apache.servicemix.specs.jsr311-api-1.1 [139.0] and com.sun.jersey.jersey-core [274.0] via two dependency chains.

Chain 1:
  com.temp.myappserver [248.4]
    import: (&(package=javax.ws.rs)(version>=1.1.0)(!(version>=2.0.0)))
     |
    export: package=javax.ws.rs
  org.apache.servicemix.specs.jsr311-api-1.1 [139.0]

Chain 2:
  com.temp.myappserver [248.4]
    import: (package=com.sun.jersey.spi.container.servlet)
     |
    export: package=com.sun.jersey.spi.container.servlet; uses:=com.sun.jersey.server.impl.application
  com.sun.jersey.jersey-servlet [267.0]
    import: (package=com.sun.jersey.server.impl.application)
     |
    export: package=com.sun.jersey.server.impl.application; uses:=javax.ws.rs
  com.sun.jersey.jersey-server [265.0]
    import: (package=javax.ws.rs)
     |
    export: package=javax.ws.rs
  com.sun.jersey.jersey-core [274.0]

Я знаю, почему я получаю эту ошибку - действительно, jar-манифест jerax-core экспортирует javax.ws.rs и serviceMix, зависит от его собственной реализации. Есть ли способ ее устранения или мне нужно преобразовать мои сервисы в CXF?

1 Ответ

2 голосов
/ 15 февраля 2012

Вы правильно проанализировали проблему: Феликс не может разрешить эту ситуацию, поскольку существует два пакета, предоставляющих пакет, com.sun.jersey.jersey-core не импортирует его ( должно ),и ваши собственные пакеты хотят импортировать определенную версию, отличающуюся от той, которую предоставляет com.sun.jersey.jersey-core (поскольку этот пакет не предоставляет оператора версии, по умолчанию он равен 0.0.0, поэтому он не соответствует вашим требованиям).

Итак, что вы можете сделать?

  • Лучшим решением было бы для пакета jersey-core обеспечить правильный импорт вместо наложения собственной версии на остальныеплатформы.
  • Поскольку это может занять некоторое время, вы можете удалить оператор версии в своем собственном импорте, что даст платформе возможность связать вас с пакетом jersey-core вместо * 1017.* один.Я знаю, что это не идеальная ситуация, но, похоже, это лучшее, что мы можем сделать.

В качестве общего примечания об ограничениях на использование см. Пост Нейла Бартлетта о «использованиях» * 1022.*.

...