springboot 多包工程,在使用 maven 进行打包的时候,一直提示 “程序包 xxx 不存在,找不到符号”,但项目是可以正常启动运行的,开始一直以为是 maven 哪里没有配置好导致的,后来才发现原来是 springboot 的 maven 插件导致的。
Failed to collect dependencies at com.hl:novel-common
项目结构:
xxx-parent:顶级父工程
xxx-a:子项目 1
xxx-b:子项目 2
xxx-c:子项目 3
依赖关系:
a → b → c,从左到右,依次被依赖(c 依赖 b,b 依赖 a)
问题场景:
在使用 mvn package 的时候,一直提示 “程序包 xxx 不存在,找不到符号”,开始以为是依赖的上层包没打好,仔细检查后发现都没问题,就算将本地仓库中的依赖包清理之后,重新 install 打包也还是有这个问题
原因分析:
因为之前的 springmvc 出现过类似的问题(Maven 打包失败,提示 “找不到符号”),所以一开始也以为是本地仓库的缓存所致,浪费了好长时间,后来才发现原来是 springboot 自身的编译插件 spring-boot-maven-plugin 导致的。
如上,就是 springboot 的 maven 插件,用这个插件打包的 Jar 包可以直接运行,但是不可依赖!
解决方案(三选一):
1、不要将此插件放到顶级父工程中,在需要打成可执行 jar 的地方添加就好了,如果是需要被依赖的,就不要添加此插件(如上述案例中,就是 xxx-a、xxx-b 不加,xxx-c 需要加);
2、在需要对外提供依赖的项目的 pom 里设置(如本项目的 xxx-a、xxx-b),这样设置会让项目生成两个 jar:一个可执行 jar,一个可依赖的 jar;
3、在 configuration 中加入 skip 标签,取消生成可执行 jar;