You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动