多模块Maven SpringBoot项目启动报错:找不到或无法加载主类Main.class
问题分析与解决方案
核心原因
你遇到的问题本质是类路径配置错误,以及对Spring Boot多模块项目启动逻辑的误解:
- 直接运行
.java源文件是Java 11+的单文件运行特性,JVM会临时编译并处理依赖,但这不是Spring Boot项目的常规启动方式。 - 执行
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
相关产品推荐
相关产品推荐

