Search code examples
javawindowsosgieclipse-rcpguava

Eclipse RCP application starts only as administrator


A few days ago we decided to start using Guava in our Eclipse RCP application. I downloaded guava-14.0.1.jar from http://central.maven.org/maven2/com/google/guava/guava/14.0.1/.

After I had started eclipse.exe the application crashed. The .metadata/.log file contained the following errors:

!ENTRY org.eclipse.osgi 4 0 2013-08-12 15:56:32.033
!MESSAGE Application error
!STACK 1
java.lang.NoClassDefFoundError: com/google/common/base/Optional
    at com.treeage.treeagepro.license.LicenseLevel.<clinit>(Unknown Source)
    at com.treeage.treeagepro.license.LicenseInfo.<init>(Unknown Source)
    at com.treeage.treeagepro.license.LicenseManager.<init>(Unknown Source)
    at com.treeage.treeagepro.license.LicenseManager.getManager(Unknown Source)
    at com.treeage.treeagepro.app.ApplicationWorkbenchAdvisor.initialize(Unknown Source)
    at org.eclipse.ui.application.WorkbenchAdvisor.internalBasicInitialize(WorkbenchAdvisor.java:188)
    at org.eclipse.ui.internal.Workbench$28.runWithException(Workbench.java:1541)
    at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4144)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2609)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
    at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at com.treeage.treeagepro.app.Application.start(Unknown Source)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Optional
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 31 more

There is no error if the application is running as an administrator.

The application is 64 bit, so this is not an UAC virtualization issue. But it looks like the problem is somehow connected with permissions.


guava-14.0.1.jar seems to be a valid OSGi bundle: https://code.google.com/p/guava-libraries/issues/detail?id=688 (At least I found all necessary headers in MANIFEST.MF)

Any suggestions?


Solution

  • I fixed my problem by wiping out C:\Users\<user_name>\.eclipse folder. It looks like the problem was somehow connected with OSGi (Equinox) temporary directories.