我在现有的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罐子。如果我运行产品 - >验证,则表示未检测到问题'。当我运行它时,会出现上面显示的消息。
任何帮助将不胜感激!
答案 0 :(得分:3)
为什么My3rdPartyLib.my3rdPartyLib_api导出slf4j.api?也许您可以将其更改为仅导入它。你不知道activemq-all是否也导出了slf4j.api。一个想法可能不是使用activemq-all而是使用您需要的单个activemq部分。 -all bundle可以很方便,但是它们在uber包中的包装可以修复某些限制,这会破坏系统的其他部分。