由于违反使用约束,未解决捆绑包
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 中可以修复某些会扰乱系统其他部分的约束。
我在现有的 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 中可以修复某些会扰乱系统其他部分的约束。