java 技术随笔

Spring Boot 报错:找不到或无法加载主类 原因与解决办法

执行 java -jar xxx.jar 或 IDE 运行时报错 找不到或无法加载主类 com.xxx.DemoApplication,并不是“类真的丢了”,而是 JVM 在指定路径下找不到可加载的主类。常见原因与解决办法如下。

一、常见原因

  1. 编译产物缺失:target/classes 还没有生成,或打包不完整。
  2. JDK 版本不匹配:pom.xml 中 maven-compiler-plugin 的 source/target 高于本地 JDK 版本。
  3. 主类全限定名错误:运行配置里填写的主类路径与实际不符。
  4. 多模块项目:在错误的模块下运行,主类不在该模块。
  5. 包名与目录结构不一致,导致字节码路径对不上。

二、解决办法

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

三、快速排查顺序

  1. mvn clean compile 看是否编译通过。
  2. 检查本地 JDK 版本(java -version)与 pom 是否一致。
  3. 确认运行的是包含主类的模块。
标签
Spring Boot报错主类