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
相关产品推荐
相关产品推荐

