由于违反使用约束,未解决捆绑包

Bundle was not resolved because of a uses contraint violation

我在现有的 Eclipse RCP 应用程序中引入了第 3 方插件,现在我的日志记录不再有效。它似乎正在使用它自己的 slf4j 版本。我怎样才能解决这个问题并让我的 slf4j 和第 3 方 jar 中的那个和谐共存?

  Bundle was not resolved because of a uses contraint violation.
    org.osgi.service.resolver.ResolutionException: Uses constraint violation. 
    Unable to resolve resource My3rdPartyLib.my3rdPartyLib_api [osgi.identity; 
    osgi.identity="My3rdPartyLib.my3rdPartyLib_api"; type="osgi.bundle"; 
    version:Version="2.4"] because it is exposed to package 'org.slf4j' 
    from resources slf4j.api [osgi.identity; osgi.identity="slf4j.api"; 
    type="osgi.bundle"; version:Version="1.7.21"] and activemq-all 
    [osgi.identity; osgi.identity="activemq-all"; type="osgi.bundle"; 
    version:Version="5.9.0"] via two dependency chains.

Chain 1:
  My3rdPartyLib.my3rdPartyLib_api [osgi.identity; 
   osgi.identity="My3rdPartyLib.my3rdPartyLib_api"; type="osgi.bundle"; 
   version:Version="2.4"]
    import: (osgi.wiring.package=org.slf4j)
     |
    export: osgi.wiring.package: org.slf4j
  slf4j.api [osgi.identity; osgi.identity="slf4j.api"; 
   type="osgi.bundle"; version:Version="1.7.21"]

Chain 2:
  My3rdPartyLib.my3rdPartyLib_api [osgi.identity; 
   osgi.identity="My3rdPartyLib.my3rdPartyLib_api"; type="osgi.bundle"; 
   version:Version="2.4"]
    import: (osgi.wiring.package=org.apache.activemq)
     |
    export: osgi.wiring.package: org.apache.activemq; uses:=org.slf4j
    export: osgi.wiring.package=org.slf4j
  activemq-all [osgi.identity; osgi.identity="activemq-all"; 
   type="osgi.bundle"; version:Version="5.9.0"]
    at org.eclipse.osgi.container.Module.start(Module.java:434)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1582)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1561)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1533)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1476)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)

我尝试将其作为 RCP 插件包含在内。在 target->content 视图中,我勾选了第 3 方 jar 及其必要的依赖项。我也勾选了我需要的 slf4j 罐子。如果我 运行 产品-> 验证它说 'no problems detected'。当我 运行 它时,它会爆炸并显示如上所示的消息。

如有任何帮助,我们将不胜感激!

为什么 My3rdPartyLib.my3rdPartyLib_api 导出 slf4j.api?也许您可以将其更改为仅导入它。您没有显示 activemq-all 是否也导出 slf4j.api。一种想法可能不使用 activemq-all,而是使用您需要的各个 activemq 部分。 -all bundle 可能很方便,但是将它们一起打包在一个 uber bundle 中可以修复某些会扰乱系统其他部分的约束。