Karaf OSGI如何解决Google Guava的两个依赖链冲突

时间:2020-06-04 18:38:33

标签: osgi apache-karaf

2.8及其cxf功能3.3.5以及作为功能安装的cxf-jaxrs都依赖于Google Guava 20.0。我有自己的项目,在其中我通过Karaf功能安装了两个jar,其中包括一个Google Guava 18.0。我现在要安装的捆绑软件具有适用于18.0的Google Guava依赖项,但是出现以下错误:


Chain 1:
  arcanite-core [arcanite-core [269](R 269.0)]
    import: (&(osgi.wiring.package=com.google.common.collect)(version>=18.0.0)(!(version>=19.0.0)))
     |
    export: osgi.wiring.package: com.google.common.collect
  com.google.guava [com.google.guava [253](R 253.0)]

Chain 2:
  arcanite-core [arcanite-core [269](R 269.0)]
    import: (&(osgi.wiring.package=com.querydsl.core)(version>=4.2.0)(!(version>=5.0.0)))
     |
    export: osgi.wiring.package=com.querydsl.core; uses:=com.google.common.collect
  com.querydsl.core [com.querydsl.core [255](R 255.0)]
    import: (&(osgi.wiring.package=com.google.common.collect)(version>=18.0.0))
     |
    export: osgi.wiring.package: com.google.common.collect
  com.google.guava [com.google.guava [172](R 172.0)] Unresolved requirements: [[arcanite-core [269](R 269.0)] osgi.wiring.package; (&(osgi.wiring.package=com.querydsl.core)(version>=4.2.0)(!(version>=5.0.0)))]

在导入项目时,我已明确导入18.0版本:

<Import-Package>
...
com.google.common.collect;version="[18.0,19.0)",
*
<Import-Package>

我该如何摆脱这种冲突,这真的只是卡拉夫(OSGI)中只有一个版本的番石榴,我在做什么错了?

1 个答案:

答案 0 :(得分:0)

好吧,这很棘手,因为说cxf功能构成了Guava 20.0的依赖项。 然后在里面安装我自己的带有query-dsl和guvava 18.0 jar的功能。 但是,根据maven并没有解决对guava的querydsl依赖关系,而是根据karaf中现有的20.0番石榴来解决。

当我现在安装带有query-dsl和guava 18.0的捆绑软件时,就会出现冲突。

最后,我从该功能中删除了18.0库,并允许在我的项目中使用更大的版本范围: ... com.google.common.collect; version =“ [18.0,23.0)”, *

冲突消失了,让我想知道如何在Feature.xml中的querydsl和guava 18.0之间,如果可能的话,指定这种依赖关系。

相关问题