我正在尝试通过插件片段在eclipse PMD插件中扩展规则。当我尝试测试我的代码时,我得到了这个错误,这似乎是由我的一个插件的依赖项目引起的。
!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)
任何人都可以解码此错误消息的含义以及解决方法吗?
答案 0 :(得分:1)
我认为问题是由于Require-Bundle
捆绑中的net.sourceforge.pmd.eclipse.plugin
指令与Export-Package
的{{1}}指令相结合(这或多或少只是一个改写felix错误消息)。
必需的bundle org.apache.log4j
导入log4j,同时de.fu_berlin.inf.archnemesis
在其类路径中有log4j jar(因为它导出它,这就是它告诉你的错误信息)。这会导致org.apache.log4j包重复并触发错误。
尝试从运行时删除et.sourceforge.pmd.eclipse.plugin
捆绑包,以便让org.apache.log4j
解析来自de.fu_berlin.inf.archnemesis
的log4。
另请阅读this post关于解决OSGi“使用”约束违规行为作者:Neil Bartlett:我发现它非常有趣。