Maven项目IntelliJ中出现java.lang.NoClassDefFoundError: org/jsoup/Jsoup问题排查
分析
java.lang.NoClassDefFoundError: org/jsoup/Jsoup的常见原因 针对你在Maven+JAX-RS项目中遇到的这个错误,即使已经添加了Jsoup依赖和Jar包,通常是以下几个场景导致的,咱们逐个排查:
1. Maven依赖范围配置错误
最常见的问题就是依赖的scope设置不对。比如你可能给Jsoup依赖加了<scope>provided</scope>或者<scope>test</scope>:
<!-- 错误示例:这类scope会导致运行时不包含Jsoup包 --> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.17.2</version> <scope>provided</scope> </dependency>
provided意味着你假设运行的容器(比如Tomcat、WildFly)已经提供了Jsoup,但实际上这些容器默认不会包含Jsoup,所以运行时就找不到类了。正确的配置应该去掉不必要的scope,让Maven默认把它打包到项目中:
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>你的Jsoup版本号</version> </dependency>
2. Maven依赖未正确同步或本地仓库包损坏
有时候IDE的Maven同步会出问题,或者本地Maven仓库里的Jsoup包损坏了,导致编译时能找到,但运行时找不到。你可以试试:
- 在IDE中执行
mvn clean install命令,强制清理旧构建文件并重新下载依赖 - 手动检查本地Maven仓库(默认路径是
~/.m2/repository/org/jsoup/jsoup),如果对应版本的Jar包不存在或者大小异常,删掉整个jsoup目录后重新执行Maven构建
3. 打包时未包含Jsoup依赖
如果你的JAX-RS项目是打包成WAR包部署的,要确认打包后的WAR包里是否包含Jsoup。可以解压WAR包,查看WEB-INF/lib目录下有没有jsoup-xxx.jar文件:
- 如果没有,可能是Maven打包插件(比如
maven-war-plugin)的配置排除了该依赖,或者你的依赖传递有问题 - 也可以执行
mvn dependency:tree命令,查看Jsoup依赖是否被正确引入,有没有被其他依赖排除
4. 类加载器冲突或容器类加载策略问题
JAX-RS的运行环境(比如Jersey、RESTEasy)或者你部署的应用服务器,类加载器可能没加载到Jsoup的类:
- 如果你手动把Jsoup Jar放到了容器的全局
lib目录(比如Tomcat的lib),可能会和项目内的类加载器产生冲突,建议把Jsoup依赖放在项目自身的WEB-INF/lib下 - 有些容器的类加载策略会优先加载全局类,导致项目内的Jsoup无法被正确加载,这种情况需要调整容器的类加载配置(比如Tomcat的
context.xml里的antiResourceLocking等参数)
5. 手动添加Jar而非Maven管理导致的不一致
如果你是手动添加Jsoup Jar到项目中,而不是通过Maven依赖管理,可能会出现IDE编译时能找到,但打包时没把Jar包含进去的情况。建议尽量通过Maven管理所有依赖,避免手动操作带来的类路径不一致问题。
内容的提问来源于stack exchange,提问作者Sasanka Kudagoda
相关产品推荐
相关产品推荐

