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?
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.