SpringBoot多模块打包问题记录

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


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

1
2
3
4
5
xxx-parent
---xxx-api
---xxx-common
---xxx-core
---xxx-web

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<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 标签,那最终在打包的时候一定要注意会出现上述情况。

点击查看

本文标题:SpringBoot多模块打包问题记录

文章作者:LiJing

发布时间:2022年03月25日 - 11:01:59

最后更新:2023年06月03日 - 10:03:33

原始链接:https://blog-next.xiaojingge.com/posts/394482473.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------