由于使用禁令违规,捆绑未解决

时间:2016-12-13 14:29:25

标签: eclipse osgi rcp

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

  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->内容视图中,我勾选第三方jar及其必要的依赖项。我也检查了我需要的slf4j罐子。如果我运行产品 - >验证,则表示未检测到问题'。当我运行它时,会出现上面显示的消息。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

为什么My3rdPartyLib.my3rdPartyLib_api导出slf4j.api?也许您可以将其更改为仅导入它。你不知道activemq-all是否也导出了slf4j.api。一个想法可能不是使用activemq-all而是使用您需要的单个activemq部分。 -all bundle可以很方便,但是它们在uber包中的包装可以修复某些限制,这会破坏系统的其他部分。