可以使用Neo4j Tinkerpop API访问Neo4j 3.5.1(最新版本)吗?

时间:2019-01-12 14:16:20

标签: neo4j tinkerpop3

我将Neo4j社区版(v 3.5.1)嵌入Java应用程序中,并尝试使用Tinkerpop API打开图形。我在这样做时遇到异常,并怀疑Neo4j Tinkerpop API实现的最新版本与Neo4J 3.5.1不兼容。它是否正确?有解决方法吗?

具体来说,我尝试使用以下内容:Neo4j CE 3.5.1,Tinkerpop 3.3.5和Neo4j Tinkerpop API实现0.7-3.2.3。我怀疑Neo4j Tinkerpop API版本与Neo4j的最新版本不兼容,但是API版本在一年多的时间内没有更新。我也尝试过使用Neo4j CE 3.4.11,但这也无法正常工作。

但是,我可以使Neo4j CE 3.2.13可以与Neo4j Tinkerpop API 0.6-3.2.2一起正常使用。

我的POM包括以下依赖项:

    <dependency>
        <groupId>org.apache.tinkerpop</groupId>
        <artifactId>tinkerpop</artifactId>
        <version>3.3.5</version>
        <type>pom</type>
    </dependency>

    <dependency>
        <groupId>org.apache.tinkerpop</groupId>
        <artifactId>gremlin-driver</artifactId>
        <version>3.3.5</version>
    </dependency>

    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j</artifactId>
        <version>3.5.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.tinkerpop</groupId>
        <artifactId>neo4j-gremlin</artifactId>
        <version>3.3.5</version>
    </dependency>

    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-tinkerpop-api-impl</artifactId>
        <version>0.7-3.2.3</version>
    </dependency>

在我的Java代码中,我尝试按以下方式打开图形:

    Configuration configuration = new BaseConfiguration();
    configuration.addProperty("gremlin.graph", "org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph");
    configuration.addProperty("gremlin.neo4j.directory", "/neo4jpoc");

    graph = Neo4jGraph.open(configuration);

尝试使用此方法打开图形时,出现以下异常:

Exception in thread "main" java.util.ServiceConfigurationError: org.neo4j.configuration.LoadableConfig: Provider org.neo4j.kernel.impl.enterprise.configuration.EnterpriseEditionSettings could not be instantiated
    at java.util.ServiceLoader.fail(ServiceLoader.java:232)
    at java.util.ServiceLoader.access$100(ServiceLoader.java:185)
    at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:384)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
    at java.util.Iterator.forEachRemaining(Iterator.java:116)
.....
Caused by: java.lang.NoSuchMethodError: org.neo4j.kernel.configuration.Settings.setting(Ljava/lang/String;Ljava/util/function/Function;Ljava/lang/String;)Lorg/neo4j/graphdb/config/BaseSetting;
    at org.neo4j.kernel.impl.enterprise.configuration.EnterpriseEditionSettings.<clinit>(EnterpriseEditionSettings.java:46)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
..... 

同样,使用Neo4j v。3.2.13没有问题,但我想使用最新版本或至少使用v。3.4.11。

谢谢。任何帮助深表感谢。

1 个答案:

答案 0 :(得分:0)

Neo4j版本由neo4j-tinkerpop-api-impl定义,该版本似乎已更新为Neo4j 3.4.10:

https://github.com/neo4j-contrib/neo4j-tinkerpop-api-impl/tree/3.4

该版本需要在neo4j-gremlin中进行更新,然后进行测试:

https://github.com/apache/tinkerpop/blob/67764ba23d67d9f62048c22e8bbcefb87463584e/neo4j-gremlin/pom.xml#L120

理想情况下,上周刚刚出现的TinkerPop 3.4.0版本中会发生这种情况,但是根据升级所需的任何更改的性质,将其应用于3.4.1可能会很好。我们很乐意考虑对这项工作的请求,但是显然您可以通过此更改从源代码构建自己的TinkerPop工件。