java
技术随笔
Spring Boot 报错:找不到或无法加载主类 原因与解决办法
执行 java -jar xxx.jar 或 IDE 运行时报错 找不到或无法加载主类 com.xxx.DemoApplication,并不是“类真的丢了”,而是 JVM 在指定路径下找不到可加载的主类。常见原因与解决办法如下。
一、常见原因
- 编译产物缺失:
target/classes还没有生成,或打包不完整。 - JDK 版本不匹配:
pom.xml中 maven-compiler-plugin 的 source/target 高于本地 JDK 版本。 - 主类全限定名错误:运行配置里填写的主类路径与实际不符。
- 多模块项目:在错误的模块下运行,主类不在该模块。
- 包名与目录结构不一致,导致字节码路径对不上。
二、解决办法
1. 重新编译打包
mvn clean package -DskipTests
确认 target/classes/com/xxx/DemoApplication.class 确实存在。
2. 对齐 JDK 与编译版本
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
将 source/target 改为本地实际安装的 JDK 版本;使用 JDK 17 时填写 17。
3. 确认主类与运行配置
主类必须带有 @SpringBootApplication 且包含 main 方法:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
IDE 运行/调试配置中的 Main class 要填全限定名,例如 com.xxx.DemoApplication。
三、快速排查顺序
- 先
mvn clean compile看是否编译通过。 - 检查本地 JDK 版本(
java -version)与 pom 是否一致。 - 确认运行的是包含主类的模块。