Spring Boot 啟動(dòng)錯(cuò)誤排查教程之找不到或無(wú)法加載主類(lèi)的三種解決方案
寫(xiě)在前面:這篇文章適合誰(shuí)?
這篇文章主要寫(xiě)給 正在開(kāi)發(fā)或?qū)W習(xí) Spring Boot 的同學(xué),尤其是剛接觸 Spring Boot、在課程設(shè)計(jì)或畢業(yè)設(shè)計(jì)階段頻繁導(dǎo)入項(xiàng)目的人。
我最近在一臺(tái) Windows 11 + JDK 8 / JDK 17 的開(kāi)發(fā)環(huán)境中,多次遇到 Spring Boot 項(xiàng)目啟動(dòng)時(shí)報(bào)錯(cuò):
錯(cuò)誤: 找不到或無(wú)法加載主類(lèi) xxx.Application
這個(gè)問(wèn)題在IDE 中看似簡(jiǎn)單,但實(shí)際排查時(shí)非常浪費(fèi)時(shí)間。在完整解決并復(fù)盤(pán)之后,我把關(guān)鍵排查點(diǎn)整理成一篇文章,希望能幫你少走彎路。
一、問(wèn)題現(xiàn)象與錯(cuò)誤本質(zhì)
常見(jiàn)報(bào)錯(cuò)信息如下:
Error: Could not find or load main class com.example.demo.DemoApplication Caused by: java.lang.ClassNotFoundException
從 JVM 的角度來(lái)看,這個(gè)錯(cuò)誤只有一個(gè)核心含義:
啟動(dòng)時(shí)指定的主類(lèi),在當(dāng)前 classpath 中不存在。
但“為什么不存在”,才是我們真正要解決的問(wèn)題。
二、第一步:確認(rèn) Spring Boot 主啟動(dòng)類(lèi)是否規(guī)范
這是最基礎(chǔ)、也是最容易被忽略的一步。
1?? 主啟動(dòng)類(lèi)必須滿(mǎn)足的條件
請(qǐng)確認(rèn)你的啟動(dòng)類(lèi)同時(shí)滿(mǎn)足以下要求:
- 位于
src/main/java目錄下 - 包名與實(shí)際目錄結(jié)構(gòu)一致
- 包含
@SpringBootApplication注解 - 包含標(biāo)準(zhǔn)的
main方法
示例代碼如下:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author LLL
* @since 2026
*/
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}?? 真實(shí)踩坑點(diǎn):
我曾在重構(gòu)包名后,只改了文件夾路徑,卻忘了同步修改package聲明,IDE 不報(bào)紅,但啟動(dòng)直接失敗。
三、第二步:檢查 IDE 的運(yùn)行配置(高頻問(wèn)題)
在我的經(jīng)驗(yàn)中,至少一半的“找不到主類(lèi)”問(wèn)題,都出在運(yùn)行配置上,而不是代碼本身。
2.1 IntelliJ IDEA 中的排查方式
依次檢查:
- 點(diǎn)擊右上角運(yùn)行配置
- 打開(kāi) Run / Debug Configurations
- 查看當(dāng)前 Spring Boot 配置項(xiàng)
重點(diǎn)關(guān)注兩個(gè)地方:
- Main class
- 是否是當(dāng)前項(xiàng)目真實(shí)存在的
Application類(lèi)
- 是否是當(dāng)前項(xiàng)目真實(shí)存在的
- Module
- 是否選擇了正確的模塊(多模塊項(xiàng)目尤其容易出錯(cuò))
?? 推薦做法
直接刪除原有運(yùn)行配置,然后:
- 右鍵點(diǎn)擊
Application類(lèi) - 選擇
Run
讓 IDEA 自動(dòng)生成配置,成功率最高。
2.2 Eclipse 中的排查方式
在 Eclipse 中,這個(gè)問(wèn)題更常見(jiàn),建議直接使用“重建思路”:
- 打開(kāi)
Run Configurations - 刪除舊的
Java Application或Spring Boot App - 重新右鍵主啟動(dòng)類(lèi) →
Run As
四、第三步:清理構(gòu)建緩存并重新編譯
當(dāng)代碼和運(yùn)行配置都沒(méi)問(wèn)題,但錯(cuò)誤依舊存在時(shí),十有八九是構(gòu)建緩存出了問(wèn)題。
3.1 Eclipse:使用 Clean 功能
Project → Clean → Clean all projects
這個(gè)操作會(huì)清理舊的 .class 文件和構(gòu)建緩存,對(duì) Eclipse 用戶(hù)非常關(guān)鍵。
3.2 IntelliJ IDEA + Maven 項(xiàng)目
我個(gè)人更推薦直接從 Maven 下手:
mvn clean package
重點(diǎn)觀察:
target/classes目錄下- 是否真的生成了
DemoApplication.class
如果 .class 文件都沒(méi)生成,JVM 自然找不到主類(lèi)。
五、容易被忽略但很致命的細(xì)節(jié)
下面這些問(wèn)題我都真實(shí)踩過(guò)坑:
- 項(xiàng)目 JDK 與 IDE JDK 不一致
- 多模塊項(xiàng)目,啟動(dòng)模塊選錯(cuò)
pom.xml編譯失敗但未注意控制臺(tái)日志- 使用了不兼容的 JDK 版本(例如低版本 Spring Boot + 高版本 JDK)
建議:
遇到問(wèn)題時(shí),先看一遍完整控制臺(tái)日志,而不是只盯著最后一行報(bào)錯(cuò)。
回到問(wèn)題本身
在文章開(kāi)頭我們提到,這個(gè)錯(cuò)誤的本質(zhì)是:
JVM 在 classpath 中找不到你指定的主類(lèi)。
只要你圍繞以下三個(gè)點(diǎn)去排查:
- 主啟動(dòng)類(lèi)是否真實(shí)存在
- IDE 是否指向了正確的類(lèi)
- 編譯結(jié)果是否真的生成
這個(gè)問(wèn)題幾乎都能解決。
結(jié)語(yǔ)
我長(zhǎng)期整理 Spring Boot / Java 畢業(yè)設(shè)計(jì) / 課程設(shè)計(jì)常見(jiàn)問(wèn)題,并將踩坑過(guò)程寫(xiě)成系列文章,主要面向計(jì)算機(jī)專(zhuān)業(yè)在校生和初學(xué)者。
到此這篇關(guān)于Spring Boot 啟動(dòng)錯(cuò)誤排查實(shí)戰(zhàn):找不到或無(wú)法加載主類(lèi)的三種解決方案的文章就介紹到這了,更多相關(guān)springboot啟動(dòng)錯(cuò)誤找不到或無(wú)法加載主類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot項(xiàng)目啟動(dòng)錯(cuò)誤:找不到或無(wú)法加載主類(lèi)的三種解決方法
- SpringBoot項(xiàng)目整合OpenFeign啟動(dòng)失敗及運(yùn)行時(shí)常見(jiàn)錯(cuò)誤解決方案
- IDEA啟動(dòng)springboot項(xiàng)目報(bào)missing ServletWebServerFactory錯(cuò)誤的解決方案
- SpringBoot項(xiàng)目整合Pulsar啟動(dòng)失敗的常見(jiàn)錯(cuò)誤處理方法
- SpringBoot整合Sentinel啟動(dòng)失敗及運(yùn)行時(shí)常見(jiàn)錯(cuò)誤總結(jié)
- SpringBoot項(xiàng)目啟動(dòng)錯(cuò)誤:找不到或無(wú)法加載主類(lèi)的幾種解決方法
- SpringBoot項(xiàng)目啟動(dòng)打包報(bào)錯(cuò)類(lèi)文件具有錯(cuò)誤的版本 61.0, 應(yīng)為 52.0的解決方法
相關(guān)文章
詳解Spring中Spel表達(dá)式和el表達(dá)式的區(qū)別
在?Java?開(kāi)發(fā)中,表達(dá)式語(yǔ)言是一種強(qiáng)大的工具,而SpEL?表達(dá)式與EL?表達(dá)式是我們常常遇到兩種表達(dá)式語(yǔ)言,下面我們就來(lái)看看它們的具體使用與區(qū)別吧2023-07-07
SpringBoot+RustFS 實(shí)現(xiàn)文件切片極速上傳的實(shí)例代碼
本文介紹利用SpringBoot和RustFS構(gòu)建高性能文件切片上傳系統(tǒng),實(shí)現(xiàn)大文件秒傳、斷點(diǎn)續(xù)傳和分片上傳等功能,具有一定的參考價(jià)值,感興趣的可以了解一下2025-09-09
Java統(tǒng)計(jì)字符串中字符出現(xiàn)次數(shù)的方法示例
這篇文章主要介紹了Java統(tǒng)計(jì)字符串中字符出現(xiàn)次數(shù)的方法,涉及Java針對(duì)字符串的遍歷、查找、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
深入理解Java對(duì)象的序列化與反序列化的應(yīng)用
本篇文章是對(duì)Java中對(duì)象的序列化與反序列化進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05

