maven-assembly-plugin 同名类覆盖时遇到的一点问题

1 篇文章 0 订阅

maven-assembly-plugin 同名类覆盖时遇到的一点问题

背景:

一个maven项目,依赖了一些jar包,我想修改某个jar包里面的某个类(比如: org.abc.classA)。由于它并没有提供很好的拓展入口,我选择投机取巧的方法,在当前项目下新建一个 org.abc.classA 类,实现我自己的逻辑。因为本地classes先于依赖的jar包被加载,同全限定类名只会被加载一次。所以就完成了对 org.abc.classA 类的覆盖。

但是,实际打包后执行却发现加载的依旧是原来的类。

我新建一个demo项目重现一下案件现场。

项目结构:

一个MainClass类,通过mybatis-plus的id生成器获取id并打印。

image-20211012211519089

另一个类 DefaultIdentifierGenerator ,是和mybatis-plus中同全限定类名的类,修改了nextId方法并返回123

image-20211012211735418

pom文件:引入了需要的依赖和 maven-compiler 和 maven-assembly 插件

image-20211012212049302

项目地址

简而言之,我打包后执行

如果加载的我自己定义的同名类,运行 jar包会输出 123

如果加载的 mybatis-plus 原来的类,则会输出一个雪花id

  • 接下来打包: mvn clean package

    image-20211012213111272

    运行,结果不是123,说明加载的是 mybatis-plus 原来的类

    image-20211012213135752

    连续试了几次,结果一直是这样。


然后我猜想,如果本地的类预先编译好,再打包可能有所不同
  • 再来一次,这次先编译再打包:mvn clean compile && mvn package

    image-20211012214740793

    运行,结果真就变成123了。试了几次也没啥问题

image-20211012214908272

初步感觉就是 maven-assembly-plugin 插件的问题,因为它就是做项目输出合并的 ,这也很明显是一个合并相关的问题。

现在不用 assembly 插件试试,换成 maven-shade-plugin 插件

pom: 文件改成

image-20211012220131001

  • 和前面一样,接下来打包: mvn clean package

    image-20211012213111272

    运行,结果是123,说明加载的是我自己定义的类

    连续试了几次,结果都正确。

  • 再来测试先编译再打包:mvn clean compile && mvn package

    image-20211012214740793

    运行结果也是123

image-20211012214908272

所以感觉确实是 maven-assembly-plugin 插件的一点问题,不过具体原因还尚不明确,以后有这种情况的话还是避免使用 maven-assembly-plugin
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值