user3119957
user3119957

Reputation: 1

neo4j not working in eclipse RCP

I want to use neo4j in an eclipse RCP application. I have a personal license, so I am allowed to do this.

I use m2e for dependencies:

<groupId>org.neo4j</groupId>
<artifactId>neo4j-enterprise</artifactId>
<version>2.0.0</version>

This is the code I use:

private static final String DB_PATH = "/Applications/neo4j-enterprise-2.0.0/data/graph.db";
private GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH)

This is the stack trace:

java.lang.NoClassDefFoundError: org/neo4j/graphdb/factory/GraphDatabaseFactory
at thedatamovement.documentalist.Controller.createGraphDB(Controller.java:98)
at thedatamovement.documentalist.Controller.start(Controller.java:124)
at thedatamovement.documentalist.View$1.widgetSelected(View.java:76)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4166)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1466)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1489)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1474)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1279)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4012)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3651)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:138)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:610)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at thedatamovement.documentalist.Application.start(Application.java:20)
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:354)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
Caused by: java.lang.ClassNotFoundException: org.neo4j.graphdb.factory.GraphDatabaseFactory cannot be found by PowerCenterDocumentalist_1.0.0.qualifier
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(ClassLoader.java:358)
... 34 more

org.neo4j.graphdb.factory is stored in neo4j-kernel-2.0.0.jar. The jar file is in Maven Dependencies

Any pointers?

Bertus

Upvotes: 0

Views: 185

Answers (1)

user3121658
user3121658

Reputation: 11

Your Eclipse runtime doesn't know about the added Maven dependency. This is why you get an java.lang.NoClassDefFoundError. Unfortunately the Neo4j jars currently are not OSGi-aware. You have to take care of it yourselves.

I know two possible solutions:

a) Add all necessary Maven dependencies to an embedded folder in your Eclipse bundle. This is how Neoeclipse [1] works.

b) Use one of the (unofficial) Neo4j OSGi bundles available out there. [2] In this case you have to add proper required-bundle/import-package entries to your MANIFEST.MF.

[1] https://github.com/neo4j-contrib/neoclipse
[2] https://github.com/BluWings/neo4j-osgi-bundle

Regards, LM

Upvotes: 1

Related Questions