最近遇到了这样一种情况,我们知道我们使用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 标签,那最终在打包的时候一定要注意会出现上述情况。
评论区