Search code examples
eclipseide

Eclipse Marketplace client installed but missing


Installation Details:

Package: Eclipse Java EE IDE for Web Developers.

Version: Luna Release (4.4.0)

Build id: 20140612-0600

OS: Windows 7

Issue:

The Eclipse marketplace client has gone missing from the drop down help menu in Eclipse:

Not appearing in the help menu

Although, the plugin is installed and up to date. I can see this in the installed software section:

Plugin visible in the installed section

I've tried reinstalling the plugin and running -clean but no change, any ideas?


Solution

  • It is possible for the plugin to have class loading issues that were not detected by p2 when it installed it.

    In this case you will see the plugin as installed because it is present in the p2 metadata of your Eclipse. However the OSGi framework might not be able to resolve the dependencies of the plugin/bundle at runtime. Such discrepancies happen because the p2 engine and the OSGi framework use different ways to resolve dependencies. The p2 engine is less accurate in the presence of multiple versions and can allow you to install plugins that can not run. It is even possible to break existing plugins by installing something completely unrelated that brings additional versions of third party libraries like logging. Typically OSGi detects that the plugin/bundle needs to load two versions of the same java package. This versioning conflict is called a "uses constraint violation".

    Open the 'Error log view' from Window->Show View->Error log. Look for logs with "FrameworkEvent ERROR" in the title related to the "org.eclipse.epp.mpc.*" plugins.

    Here is an example of a versioning conflict caused by the need for org.eclipse.epp.mpc.ui to load simultaneously two versions of the org.apache.commons.logging package. I was able to resolve this by deleting the jcl.over.slf4j jar from the "plugins" directory. This leaves Eclipse/p2 thinking the deleted jar is still installed since p2 has a record about it in it's metadata. In reality we only load at runtime one version of the package - the one exported by the org.apache.commons.logging plugin.

    org.osgi.framework.BundleException: Could not resolve module: org.eclipse.epp.mpc.ui [334]
      Unresolved requirement: Require-Bundle: org.eclipse.epp.mpc.core; bundle-version="1.3.0"
        -> Bundle-SymbolicName: org.eclipse.epp.mpc.core; bundle-version="1.3.1.v20140820-1706"
           org.eclipse.epp.mpc.core [332]
             No resolution report for the bundle.  Bundle was not resolved because of a uses contraint violation.
      org.osgi.service.resolver.ResolutionException: Uses constraint violation. Unable to resolve resource org.eclipse.epp.mpc.core [osgi.identity; osgi.identity="org.eclipse.epp.mpc.core"; type="osgi.bundle"; version:Version="1.3.1.v20140820-1706"] because it is exposed to package 'org.apache.commons.logging' from resources org.apache.commons.logging [osgi.identity; osgi.identity="org.apache.commons.logging"; type="osgi.bundle"; version:Version="1.0.4.v201101211617"] and jcl.over.slf4j [osgi.identity; osgi.identity="jcl.over.slf4j"; type="osgi.bundle"; version:Version="1.7.2"] via two dependency chains.
    
    Chain 1:
      org.eclipse.epp.mpc.core [osgi.identity; osgi.identity="org.eclipse.epp.mpc.core"; type="osgi.bundle"; version:Version="1.3.1.v20140820-1706"]
        require: (&(osgi.wiring.bundle=org.apache.commons.logging)(bundle-version>=1.0.4))
         |
        provide: osgi.wiring.bundle: org.apache.commons.logging
      org.apache.commons.logging [osgi.identity; osgi.identity="org.apache.commons.logging"; type="osgi.bundle"; version:Version="1.0.4.v201101211617"]
    
    Chain 2:
      org.eclipse.epp.mpc.core [osgi.identity; osgi.identity="org.eclipse.epp.mpc.core"; type="osgi.bundle"; version:Version="1.3.1.v20140820-1706"]
        import: (&(osgi.wiring.package=org.apache.http.impl.client)(version>=4.1.0))
         |
        export: osgi.wiring.package=org.apache.http.impl.client; uses:=org.apache.commons.logging
      org.apache.httpcomponents.httpclient [osgi.identity; osgi.identity="org.apache.httpcomponents.httpclient"; type="osgi.bundle"; version:Version="4.2.6.v201311072007"]
        import: (&(osgi.wiring.package=org.apache.commons.logging)(version>=1.1.1))
         |
        export: osgi.wiring.package: org.apache.commons.logging
      jcl.over.slf4j [osgi.identity; osgi.identity="jcl.over.slf4j"; type="osgi.bundle"; version:Version="1.7.2"]