一、现状
dubbo-api 使用不规范,导致项目之间耦合高,隐藏风险大。
在项目开发过程中,不可避免的需要跨团队业务对接,对于api包的依赖,举例以供应链中的 tms-api 包为例:
问题:
1、对于业务对接的时候,服务与服务之间进行通信,我想依赖的 tms-api 包其实只是想要包本身(api中的接口、实体、常量类、异常类)。而现状是依赖tms-api导致引入了大量我不需要的jar。
2、现在对maven项目没有做版本管理。出现的问题是:比如:依赖tms-api的项目用的是log4j打印日志。而tms-api如果在后续的升级的过程中引入了logback将导致日志打印出现问题。
其实解决这个问题最直接暴力的方法就是:采用通配符全局排掉:
最开始以为会生效,结果打出来的包并没有排除掉。不知道有没有小伙伴们也遇到过这样的问题。
二、解决办法
其实通过排除,最后发现是maven-assembly-plugin 的bug引起通配符不生效
解决这个问题有两个办法
方案1、升级maven-assembly-plugin
升级maven-assembly-plugin指定的版本,不要用默认的版本,显示指定版本号为3.1.1。
assembly主动指定版本号之后,前后对比:
如上图所示,在pom.xml配置一致的情况下,指明assembly插件的版本号打包出来的jar只有33个,说明通配符排除生效。相反有302个,说明通配符排除未生效
方案2、maven-dependency-plugin配置
maven-dependency-plugin将依赖jar先输出到编译目录下,然后用assembly将jar包打到压缩包中。
要配置两个地方:
a、pom.xml配置
b、assembly配置
三、展望
新增dubbo-api时,做到dubbo-api不依赖任何第三方依赖。如果一定要引用添加<optional>true</optional>
标签,不要将依赖关系传递给引用方,让引用方显示配置。
做到dubbo-api不依赖任何第三方依赖。最重要的就是实体一定要体现分层。比如controller层实体写admin包中,dubbo层实体写在dubbo-api包中。数据持久层实体写在dubbo-provider中。
涉及到的文件:
https://github.com/fkfengye/file-csdn-maven/blob/main/pom.xml
https://github.com/fkfengye/file-csdn-maven/blob/main/assembly.xml