Maven构建:去除依赖时通配符不生效问题

一、现状

dubbo-api 使用不规范,导致项目之间耦合高,隐藏风险大。

在项目开发过程中,不可避免的需要跨团队业务对接,对于api包的依赖,举例以供应链中的 tms-api 包为例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VV2YKd02-1617898304494)(typora-user-images/image-20210408235035956.png)]

问题:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值