我正在尝试在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?
答案 0 :(得分:2)
您已正确分析了问题:Felix无法解决此问题,因为有两个包提供了一个包,com.sun.jersey.jersey-core
没有导入它( it should ),并且您自己的bundle想要导入特定版本,这与com.sun.jersey.jersey-core
提供的版本不同(因为该捆绑包不提供版本声明,默认为0.0.0
,因此它不会符合你的要求)。
那么,你能做什么?
jersey-core
捆绑包提供正确的导入,而不是在框架的其余部分强加自己的版本。jersey-core
捆绑包,而不是servicemix
捆绑。我知道这不是一个理想的情况,但它似乎是我们能做的最好的。作为使用约束的一般说明,请参阅Neil Bartlett's post on 'uses'。