A项目依赖B项目,B项目中存在@service等注解,在本地eclipse中运行A项目时可以正常扫描B项目的注解创建对象。
但经过打包后,B项目和A项目的目录结构变成
+BOOT-INF
+classes
+lib
+META-INF
+org.springframework.boot.loader
B项目本身又作为A项目BOOT-INF/lib下的jar包,A项目使用java -jar从入口启动类启动后无法扫描到B项目的注解,
且B项目中的lib也与A项目中的lib下jar包存在重复。
解决方法,在B项目的pom.xml文件中添加<classifier>exec</classifier>
这样B项目编译后target目录下会产生两个文件
B.jar B-exec.jar
其中B-exec.jar和之前的结构一样
B.jar的目录结构是非springboot编译项目,只有B项目自身的文件
+META-INF
+com.B项目包名
配置文件....
这样再对A项目打包后,A项目BOOT-INF/lib目录下只会加入B.jar,实测启动可以正常扫描到B项目中的注解
如果需要单独执行B项目,只需执行B-exec.jar即可