我有捆绑A依赖于番石榴版本18和捆绑B,它依赖于捆绑A加上番石榴版本19提供的服务。我已经部署了番石榴版18和19捆。
当我启动bundle B时,我面对guava库的依赖链问题,因为它们有两个路径可供使用?
Chain - 1
捆绑B - >捆绑A-> guava concurrency util v18(bundle A的依赖)
Chain - 2
捆绑B - > guava concurrency util v19(来自bundle)
虽然我已经在pom.xml中的bundle B依赖中提到了依赖版本为guava 19,但为什么这与来自bundle A依赖的guava 18混淆。我如何强制它来忽略捆绑A中的番石榴只是加载版本19?
karaf@root()> restart 239
Error executing command: Error restarting bundles:
Unable to start bundle 239: Uses constraint violation. Unable to resolve resource com.sample.ngemf.fpm.pm.retImpl [com.sample.ngemf.fpm.pm.retImpl [239](R 239.11)] because it is exposed to package 'com.google.common.util.concurrent' from resources com.google.guava [com.google.guava [252](R 252.0)] and com.google.guava [com.google.guava [62](R 62.0)] via two dependency chains.
Chain 1:
com.sample.ngemf.fpm.pm.retImpl [com.sample.ngemf.fpm.pm.retImpl [239](R 239.11)]
import: (&(osgi.wiring.package=com.google.common.util.concurrent)(version>=19.0.0)(!(version>=20.0.0)))
|
export: osgi.wiring.package: com.google.common.util.concurrent
com.google.guava [com.google.guava [252](R 252.0)]
Chain 2:
com.sample.ngemf.fpm.pm.retImpl [com.sample.ngemf.fpm.pm.retImpl [239](R 239.11)]
import: (&(osgi.wiring.package=com.sample.sdn.southbound.common.api)(version>=4.1.0)(!(version>=5.0.0)))
|
export: osgi.wiring.package=com.sample.sdn.southbound.common.api; uses:=com.sample.sdn.southbound.tl1.api
com.sample.sdn.southbound.common.api [com.sample.sdn.southbound.common.api [187](R 187.0)]
import: (&(osgi.wiring.package=com.sample.sdn.southbound.tl1.api)(version>=4.1.0)(!(version>=5.0.0)))
|
export: osgi.wiring.package=com.sample.sdn.southbound.tl1.api; uses:=com.google.common.util.concurrent
com.sample.sdn.southbound.tl1.api [com.sample.sdn.southbound.tl1.api [194](R 194.0)]
import: (&(osgi.wiring.package=com.google.common.util.concurrent)(version>=18.0.0)(!(version>=19.0.0)))
|
export: osgi.wiring.package: com.google.common.util.concurrent
com.google.guava [com.google.guava [62](R 62.0)] Unresolved requirements: [[com.sample.ngemf.fpm.pm.retImpl [239](R 239.11)] osgi.wiring.package; (&(osgi.wiring.package=com.sample.sdn.southbound.common.api)(version>=4.1.0)(!(version>=5.0.0)))]
bundle B中定义中的依赖xml。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
<!-- this is the bundle a dependency which has guava 18 in it -->
<dependency>
<groupId>com.sample.sdn.southbound</groupId>
<artifactId>southbound-common-api</artifactId>
<version>${package.version}</version>
</dependency>
答案 0 :(得分:0)
将番石榴的版本添加到您的pom的dependendyManagement
部分。然后每个其他版本的番石榴都被这个替换。
答案 1 :(得分:0)
尝试仅安装一个(较新的)番石榴库。据我所知,番石榴不是非常友好的OSGi。因此,将它安装在两个版本中很可能会失败。