Maven-子模块相互依赖打包时报错:程序类找不到
问题
在搭建的一个基于SpringBoot的maven工程中(git地址),子模块间有项目依赖,biz-order-service依赖了common模块,父工程的pom.xml文件中配置了maven的打包插件:
1 | <build> |
在IDEA编辑器中将整个工程运行maven的打包命令时,biz-order-service的打包任务报错:程序包com.lzumetal.cloud.common.resp不存在。但这个包明明就是在common模块中的,而且common模块是已经成功打包至了本地。
解决方案
在被依赖的common模块的pom.xml文件中增加打包配置:
1 | <build> |
分析
导致报错的原因:spring-boot-maven-plugin打包出来的jar是不可依赖的。
解决方案:官方文档告诉我们有两种解决方案,一是移动代码,消除模块间的依赖;二是将被依赖的模块打成两个jar包。我们上面的解决方案即是第二种,通过给属性classifier指定一个值,maven打包时会多打一个jar,并且这个jar名的后面会加上这个值作为后缀,比如我将common模块打包后,得到了两个jar包:common-1.0-SNAPSHOT.jar 和 common-1.0-SNAPSHOT-exe.jar。biz-order-service模块再打包就不会再报错了。
------ 本文完 ------