有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

“使用约束冲突”导致的java OSGI捆绑包异常

我试图通过插件片段扩展EclipsePMD插件中的一条规则。当我试着测试我的代码时,我得到了这个错误,它似乎是由我的插件的一个依赖项目引起的

!ENTRY net.sourceforge.pmd.eclipse.plugin 4 0 2015-06-17 09:30:10.972
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.BundleException: Could not resolve module: net.sourceforge.pmd.eclipse.plugin [1086]
  Bundle was not resolved because of a uses contraint violation.
  org.osgi.service.resolver.ResolutionException: Uses constraint violation. Unable to resolve resource net.sourceforge.pmd.eclipse.plugin [osgi.identity; osgi.identity="net.sourceforge.pmd.eclipse.plugin"; type="osgi.bundle"; version:Version="4.0.7.v20150522-1709"; singleton:="true"] because it exports package 'org.apache.log4j' and is also exposed to it from resource org.apache.log4j [osgi.identity; osgi.identity="org.apache.log4j"; type="osgi.bundle"; version:Version="1.2.15.v201012070815"] via the following dependency chain:

  net.sourceforge.pmd.eclipse.plugin [osgi.identity; osgi.identity="net.sourceforge.pmd.eclipse.plugin"; type="osgi.bundle"; version:Version="4.0.7.v20150522-1709"; singleton:="true"]
    require: (&(osgi.wiring.bundle=de.fu_berlin.inf.archnemesis)(bundle-version>=1.0.0))
     |
    provide: osgi.wiring.bundle; osgi.wiring.bundle="de.fu_berlin.inf.archnemesis"; bundle-version:Version="1.0.0.qualifier"; singleton:="true"
  org.eclipse.xtext.util [osgi.identity; osgi.identity="org.eclipse.xtext.util"; type="osgi.bundle"; version:Version="2.8.3.v201506010551"]
    import: (&(osgi.wiring.package=org.apache.log4j)(version>=1.2.15))
     |
    export: osgi.wiring.package: org.apache.log4j
  org.apache.log4j [osgi.identity; osgi.identity="org.apache.log4j"; type="osgi.bundle"; version:Version="1.2.15.v201012070815"]
    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)

任何人都可以解码此错误消息的含义以及如何修复它吗


共 (1) 个答案

  1. # 1 楼答案

    我认为问题是由于net.sourceforge.pmd.eclipse.plugin捆绑包中的Require-Bundle指令与org.apache.log4jExport-Package指令(这或多或少只是felix错误消息的一种改写)

    所需的bundlede.fu_berlin.inf.archnemesis导入log4j,同时et.sourceforge.pmd.eclipse.plugin在其类路径中有log4j jar(因为它导出了它,这就是它告诉您的错误消息)。这导致了组织。阿帕奇。log4j包复制并触发错误

    尝试从运行时中删除org.apache.log4j捆绑包,以便让de.fu_berlin.inf.archnemesisnet.sourceforge.pmd.eclipse.plugin解析log4

    还可以阅读Neil Bartlett的this post关于解决OSGi“使用”约束冲突的内容:我发现这非常有趣