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

Maven Java中使用JSONPath Predicate遇NoClassDefFoundError求助

解决java.lang.NoClassDefFoundError: com/jayway/jsonpath/Predicate错误

问题描述

运行代码时抛出以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/jayway/jsonpath/Predicate at packagename.Hello.main(Hello.java:16)

原因分析

你的代码中导入了com.jayway.jsonpath.Criteria和com.jayway.jsonpath.Filter类,但这两个类实际位于json-path-assert依赖包中,而该包的<scope>被设置为test——这个作用域下的依赖只会在测试阶段生效,运行主程序时不会被加载到类路径中,进而导致其依赖的Predicate类无法找到。

另外,你的代码实际上并未使用Criteria和Filter,属于冗余导入,这也是引发问题的直接诱因。

解决方案

方案1:删除冗余导入(推荐)

直接移除代码中未使用的Criteria和Filter导入语句,修改后的代码如下:

package packagename;

import com.jayway.jsonpath.JsonPath;

public class SimValJSONTEST {
    public static void main(String[] args) {
        String json = "{\"id\":12345, \"studentname\":\"James Anderson\", \"age\":35,"+
            " \"subjects\":[\"Computer Science\", \"Physics\"]}";

        String subject = JsonPath.read(json, "$.subjects[0]");
        System.out.println(subject);
    }
}

方案2:调整依赖作用域(若需使用Criteria/Filter)

如果你确实需要使用Criteria或Filter类,将json-path-assert的作用域从test改为compile,确保运行时能加载该依赖:

<!-- https://mvnrepository.com/artifact/com.jayway.jsonpath/json-path -->
<dependency>
  <groupId>com.jayway.jsonpath</groupId>
  <artifactId>json-path</artifactId>
  <version>2.7.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.jayway.jsonpath/json-path-assert -->
<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path-assert</artifactId>
    <version>2.7.0</version>
    <scope>compile</scope>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:01:33