2013-12-19 3 views
0

Я хочу использовать neo4j в приложении RCP затмения. У меня есть личная лицензия, поэтому я могу это сделать.neo4j не работает в eclipse RCP

Я использую m2e зависимостей:

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

Это код, я использую:

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

Это трассировки стека:

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. фабрика хранится в neo4j-kernel-2.0.0.jar. Файл jar находится в Maven Dependencies

Любые указатели?

Bertus

ответ

1

Ваше время выполнения Eclipse, не знает о добавленной Maven зависимости. Вот почему вы получаете java.lang.NoClassDefFoundError. К сожалению, в настоящее время баки Neo4j не поддерживают OSGi. Вы должны сами позаботиться о себе.

Я знаю два возможных решения:

а) Добавить все необходимые Maven зависимостей в внедренного папку в связке Eclipse. Вот как работает Neoeclipse [1].

b) Используйте один из (неофициальных) пакетов Neo4j OSGi, доступных там. [2] В этом случае вы должны добавить в свой MANIFEST.MF соответствующие записи требуемого пакета/импорта-пакета.

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

С уважением, LM

+0

вариант 1 работает. Однако я нашел альтернативный способ заставить его работать. Я создал проект RCP из банок. Я включил каждую банку в папку neo4j и добавил ее как зависимость от моего основного проекта RCP. Теперь это работает. Таким образом, мои папки не загромождают вещи neo4j. – user3119957

+0

Да, это очень близко к а), за исключением того, что вы разделяете приложение и библиотеку на два разделенных пакета плагина, что абсолютно нормально. – user3121658