4

我正在尝试在 FuseESB 中部署 Jersey servlet(基于 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]

我知道为什么我会收到这个错误 - 实际上 jersey-core jar 清单导出 javax.ws.rs 和 serviceMix 取决于它自己的实现。有没有办法解决它或者我需要将我的服务转换为 CXF?

4

1 回答 1

2

您已经正确分析了问题:Felix 无法解决这种情况,因为有两个捆绑包提供了一个包,com.sun.jersey.jersey-core不导入它(它应该),并且您自己的捆绑包想要导入一个特定版本,这与那个不同提供com.sun.jersey.jersey-core(由于该捆绑包不提供版本声明,因此默认为0.0.0,因此不符合您的要求)。

所以,你可以做什么?

  • 最好的解决方案是让jersey-core包提供正确的导入,而不是将其自己的版本强加于框架的其余部分。
  • 由于这可能需要一段时间,您可以在自己的导入中删除版本语句,让框架有机会将您连接到jersey-core捆绑包,而不是捆绑包servicemix。我知道这不是一个理想的情况,但这似乎是我们能做的最好的事情。

作为有关使用限制的一般说明,请参阅Neil Bartlett 关于“使用”的帖子

于 2012-02-15T10:49:25.423 回答