You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多模块Maven SpringBoot项目启动报错:找不到或无法加载主类Main.class

问题分析与解决方案

核心原因

你遇到的问题本质是类路径配置错误,以及对Spring Boot多模块项目启动逻辑的误解:

  1. 直接运行.java源文件是Java 11+的单文件运行特性,JVM会临时编译并处理依赖,但这不是Spring Boot项目的常规启动方式。
  2. 执行java com.company.package.blabla.Main时,JVM在当前类路径下找不到编译后的Main.class——多模块Maven项目的编译产物默认存放在各自子模块的target/classes目录,根目录的类路径不包含该目录,也未引入项目依赖的jar包,因此报错。

正确启动方式

1. 使用Spring Boot Maven插件启动(推荐)

这是Spring Boot项目最标准的启动方式,插件会自动处理类路径、依赖和启动逻辑:

  • 进入Submodule-1目录执行:
    mvn spring-boot:run
    
  • 或在根目录指定模块执行:
    mvn -pl Submodule-1 spring-boot:run
    
    其中-pl参数用于指定要构建的目标模块。

2. 打包为可执行Jar后运行

先确保Submodule-1的pom.xml配置了Spring Boot打包插件(用于生成包含所有依赖的可执行Jar):

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>3.2.0</version> <!-- 匹配你的Spring Boot版本 -->
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

然后执行打包命令:

mvn clean package

打包完成后,进入Submodule-1/target目录运行Jar:

java -jar Submodule-1-[版本号].jar

3. 直接用java命令运行编译后的类(仅调试用)

若必须直接运行编译后的类,需手动指定完整类路径,包含编译产物和所有依赖:

# Linux/macOS
java -cp "Submodule-1/target/classes:Submodule-1/target/lib/*" com.company.package.blabla.Main

# Windows
java -cp "Submodule-1\target\classes;Submodule-1\target\lib\*" com.company.package.blabla.Main

额外检查项

确保Submodule-1的pom.xml正确继承Spring Boot父Pom,以统一依赖版本和配置:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.0</version>
    <relativePath/>
</parent>

内容的提问来源于stack exchange,提问作者PumpingSalad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:30:44