You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot整合JanusGraph遇类找不到错误,求排查方案

SpringBoot连接JanusGraph执行CRUD时出现类找不到错误

我尝试用SpringBoot连接JanusGraph执行CRUD操作,Gremlin Server已在8182端口启动,也试过用绝对路径读取配置文件,但出现以下错误:

java.lang.ClassNotFoundException: org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IoStep
java.lang.ClassNotFoundException: org.apache.tinkerpop.gremlin.process.traversal.step.filter.NoneStep

相关代码与配置

1. Maven依赖配置

<dependency>
    <groupId>org.janusgraph</groupId>
    <artifactId>janusgraph-core</artifactId>
    <version>0.5.2</version>
</dependency>
<dependency>
    <groupId>org.janusgraph</groupId>
    <artifactId>janusgraph-berkeleyje</artifactId>
    <version>0.6.1</version>
</dependency>
<dependency>
    <groupId>org.apache.tinkerpop</groupId>
    <artifactId>gremlin-driver</artifactId>
    <version>3.2.9</version>
</dependency>

2. 业务代码(GraphT类)

@RestController
public class GraphT {

    @GetMapping("/test")
    String all() {
        Graph graph = JanusGraphFactory.open("conf/janusgraph-berkeleyje.properties");
        GraphTraversalSource g = graph.traversal();
        // 添加顶点
        g.addV("person").property("name", "bob").property("age", 27).iterate();
        // 提交事务
        g.tx().commit();
        // 查询顶点属性
        List<Map<String, Object>> result = g.V().valueMap("name", "age").toList();
        // 预期返回值:[{name: ["bob"], age: [27]}]
        for(Map<String, Object> vertex : result){
            // 预期vertex为{name:["bob"], age: [27]}
            ArrayList<String> names = (ArrayList<String>)vertex.get("name");  // 获取["bob"]
            ArrayList<Integer> ages = (ArrayList<Integer>)vertex.get("age");  // 获取[27]
            String name = names.get(0);  // 获取"bob"
            Integer age = ages.get(0);  // 获取27
            System.out.printf("name: %s, age: %s\n", name, age);
        }
        // 查询顶点数量
        Long count = g.V().count().next();
        System.out.printf("vertex count is %d\n", count);

        try {
            graph.close();
        } catch (Exception ex) {
            // 处理异常
        }

        return " some result ";

    }

}

3. JanusGraph配置文件

gremlin.graph=org.janusgraph.core.JanusGraphFactory
storage.backend=berkeleyje
storage.directory=../db/berkeley

请问是代码或配置文件存在问题,还是需要配置Gremlin Server的yaml文件?


解决方案

出现ClassNotFoundException的核心原因是依赖版本不兼容:

  • JanusGraph组件版本不一致:janusgraph-core用0.5.2,janusgraph-berkeleyje却用0.6.1,两者依赖的TinkerPop版本不匹配
  • gremlin-driver版本3.2.9与JanusGraph依赖的TinkerPop版本差距过大,导致部分类无法找到

修复步骤:

  1. 统一JanusGraph组件版本
    把所有JanusGraph相关依赖的版本统一,推荐使用0.6.1(更新更稳定):

    <dependency>
        <groupId>org.janusgraph</groupId>
        <artifactId>janusgraph-core</artifactId>
        <version>0.6.1</version>
    </dependency>
    <dependency>
        <groupId>org.janusgraph</groupId>
        <artifactId>janusgraph-berkeleyje</artifactId>
        <version>0.6.1</version>
    </dependency>
    
  2. 匹配对应TinkerPop版本
    JanusGraph 0.6.1依赖的TinkerPop版本是3.4.11,因此gremlin-driver需要同步修改:

    <dependency>
        <groupId>org.apache.tinkerpop</groupId>
        <artifactId>gremlin-driver</artifactId>
        <version>3.4.11</version>
    </dependency>
    
  3. 代码与配置优化

    • 你的代码是直接连接本地JanusGraph存储,并未通过Gremlin Server(8182端口),因此不需要修改Gremlin Server的yaml配置
    • 建议用try-with-resources语法自动关闭Graph资源,避免泄漏:
      try (Graph graph = JanusGraphFactory.open("conf/janusgraph-berkeleyje.properties")) {
          GraphTraversalSource g = graph.traversal();
          // 业务代码逻辑
          g.tx().commit();
      } catch (Exception e) {
          e.printStackTrace();
      }
      
    • 确认配置文件路径正确,若有路径问题可直接使用绝对路径

内容的提问来源于stack exchange,提问作者Keerthi Hassan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:45:41