Maven多模块SpringBoot项目生成可运行Jar问题求助
解决SpringBoot多模块电商项目打包Jar无法运行的问题
我来帮你搞定这个问题,多模块SpringBoot项目打包踩坑太常见了,咱们一步步来排查修复:
一、先检查父Pom的核心配置
如果你的项目有父pom,首先得把SpringBoot的父依赖和打包插件管理配置好,这是基础:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>你的SpringBoot版本号</version> <relativePath/> <!-- 让Maven从远程仓库拉取,不用本地路径 --> </parent> <build> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>和SpringBoot版本一致</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> </build>
二、给主业务模块(eshop-site)配置打包插件
因为eshop-site是要生成可执行Jar的模块,必须在它的pom里明确指定主类和打包插件,别让Maven猜:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 这里填你的EShopSiteApplication的全类名,比如com.eshop.EShopSiteApplication --> <mainClass>你的主类全路径</mainClass> </configuration> </plugin> </plugins> </build>
⚠️ 注意:eshop-core作为依赖模块,绝对不能配这个spring-boot-maven插件的repackage目标,它只需要打包成普通Jar就行,不然会导致依赖加载异常。
三、用Maven命令正确打包,别用STS导出
STS的导出功能经常处理不好SpringBoot的依赖打包,咱们用更可靠的Maven命令:
- 先清理整个项目的旧编译文件:
mvn clean - 先把eshop-core安装到本地仓库,这样eshop-site能拿到依赖:
mvn install -pl eshop-core -am-pl指定要处理的模块,-am表示自动处理该模块的依赖(如果有的话)
- 最后打包eshop-site:
mvn package -pl eshop-site
打包完去eshop-site的target目录看,会有两个Jar:一个是普通Jar(体积小),另一个是可执行Jar(体积大,可能带-exec后缀,不同SpringBoot版本命名略有不同)。
四、运行可执行Jar
打开命令行,跑到eshop-site的target目录,执行:
java -jar 你的可执行Jar文件名.jar
五、常见坑排查
- 找不到主类:检查pom里的
mainClass路径是不是写错了,或者主类上有没有加@SpringBootApplication注解。 - 找不到依赖类:确认eshop-core已经
mvn install成功,而且eshop-site的pom里对eshop-core的依赖配置正确(groupId、artifactId、版本号都要对应)。 - 打包后Jar里没包含依赖:看看主模块的pom是不是没正确继承父pom的插件配置,或者插件的repackage目标没生效。
内容的提问来源于stack exchange,提问作者R-R




