目 录CONTENT

文章目录

SpringBoot多模块打包问题记录

筱晶哥哥
2022-03-25 / 0 评论 / 0 点赞 / 120 阅读 / 3139 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-03-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

最近遇到了这样一种情况,我们知道我们使用Maven创建工程的时候是支持多模块开发的,但是当我打包的时候,却发现其中一个web工程中,明明引用了公共工程,而且公共工程也都安装到本地Maven仓库了,但是打包的时候,却找不到公共包。

比如说项目工程结构如下:

xxx-parent
---xxx-api
---xxx-common
---xxx-core
---xxx-web

在开发过程中,编译,启动没有问题,但是,现在要部署到服务器上,需要进行打包。

我需要把项目打成jar包,Springboot的主启动类在xxx-web里,其他的模块都是被引用的,没有启动类,只需要打包成jar,这很容易。

当其他几个模块都打包完成后,进行web打包,结果maven报错,找不到其他几个包,试了几次都不行。

检查了一下,代码肯定没问题,项目结构也没问题,几个模块的pom文件也没有问题。

后来发现,我在父项目 xxx-parent 的pom中,设置了

<build> 
    <finalName>xxx-web</finalName> 
    <plugins> 
        <plugin> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-maven-plugin</artifactId> 
            <configuration> 
                <mainClass>com.itjing.xxx.XxxWebApplication</mainClass> 
            </configuration> 
            <executions> 
                <execution> 
                    <goals> 
                        <goal>repackage</goal> 
                    </goals> 
                </execution> 
            </executions> 
        </plugin> 
    </plugins> 
</build>

本来是为了方便统一管理的。

maven中 在父级pom中的设置,如果子项目没有设置,会继承父级的设置。

这样就导致了其他几个项目,打包中都用了maven-plugin插件,打出来的包和项目中引用的jar包有所区别,导致web项目再打包时,引用不到jar包。

把父pom文件中的 build 标签删除,在依次执行打包,最后执行web打包,就成功了。

总结:

在SpringBoot 多模块项目中,一般不要在父pom文件和其他没有启动类的项目中配置 build 标签。

只在需要的子项目的pom文件中配置(一般是web项目)。

如果在父pom文件中配置了 build 标签,那最终在打包的时候一定要注意会出现上述情况。

0

评论区