Spring Boot jar命令行可正常启动 但IntelliJ IDEA运行报NoClassDefFoundError
问题原因
1. NoClassDefFoundError类不存在错误
java -jar命令能正常启动说明打包生成的可执行jar已经包含了全部所需依赖,IDEA本地运行失败是IDEA运行时classpath和maven/gradle构建的classpath不一致导致的,常见原因如下:
- 依赖的
KKRepository所属的子模块未被标记为当前启动模块的编译依赖,IDEA运行时不会将该子模块编译后的class文件加载到classpath - IDEA本地构建缓存损坏,依赖子模块的class文件未正常生成或更新
- IDEA启动配置未设置启动前自动构建项目,使用旧的classpath启动服务
2. 线程泄漏警告
2021-11-15 11:04:47 WARN WebappClassLoaderBase:173 - - The web application [MM] appears to have started a thread named [RxIoScheduler-1 (Evictor)] but has failed to stop it. This is very likely to create a memory leak.
该警告属于服务启动失败后的次生问题:上一次服务强制终止时没有正常销毁RxJava创建的后台调度线程,残留线程持有类加载器引用,解决主启动错误后该警告会自动消失。
解决方法
按以下顺序排查即可解决问题:
- 清理IDEA缓存并全量构建:点击顶部菜单
File -> Invalidate Caches...,勾选Clear file system cache and local history后重启IDEA,索引加载完成后执行Build -> Rebuild Project,再尝试启动服务 - 检查模块依赖配置:打开
File -> Project Structure -> Modules,选中当前启动的Spring Boot模块,切换到Dependencies标签,确认KKRepository所属的子模块已在依赖列表中,且Scope设置为Compile - 核对启动配置:点击右上角启动配置的编辑按钮,查看
Before launch栏,确认已添加Build任务,没有勾选跳过构建的选项 - 同步构建工具依赖:在项目根目录执行
mvn clean install(Gradle项目执行./gradlew build),将所有子模块安装到本地仓库后再重启IDEA服务
内容的提问来源于stack exchange,提问作者Jill
相关产品推荐
相关产品推荐

