编程语言
首页 > 编程语言> > java – 解析FuseESB和Jersey Servlet中的两个依赖链

java – 解析FuseESB和Jersey Servlet中的两个依赖链

作者:互联网

我试图在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?

解决方法:

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

所以,你可以做什么?

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

有关使用限制的一般说明,请参见Neil Bartlett’s post on ‘uses’.

标签:java,jersey,osgi,apache-felix,fuseesb
来源: https://codeday.me/bug/20190704/1377338.html