OSGI bundle exception caused by a 'uses constraint violation'

3k views Asked by At

I'm trying to extend a rule in the eclipse PMD plugin via a plugin fragment. When I try to test my code I get this error which seems to be caused by one of my plugin's dependency projects.

!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)

Can anyone decode what this error message means and how to fix it?

1

There are 1 answers

0
matteo rulli On

I think that the problem is due to the Require-Bundle directive in net.sourceforge.pmd.eclipse.plugin bundle coupled with the Export-Package directive for org.apache.log4j (this is more or less just a rephrasal of the felix error message).

The required bundle de.fu_berlin.inf.archnemesis imports log4j and at the same time et.sourceforge.pmd.eclipse.plugin has log4j jars in its classpath (since it exports it, this is what the error message it telling you). This leads to org.apache.log4j package duplication and triggers the error.

Try to remove the org.apache.log4j bundle from your runtime in order to let de.fu_berlin.inf.archnemesis resolve log4 from net.sourceforge.pmd.eclipse.plugin.

Read also this post about Solving OSGi "Uses" Constraint Violations by Neil Bartlett: I found it very interesting.