如何解决 maven 第三方 sdk 的 jar 包冲突

背景

最近, 我们提供给公司其他部门的 sdk, 对方在引入后, 运行报错, 因为他们项目中依赖的 jar 和我们提供的 sdk 依赖的 jar 冲突.
然而, 仅仅使用 exclusions 排除依赖, 可能并不能真正解决问题. 假如我们就是想引入两个不同版本的依赖呢?

方案

事实上, 已经有成熟的 maven 插件可以做这件事情, 就是 maven-shade 插件.
该插件原理就是手动配置好需要重命名的包和要改名为的包, 在 mvn package 时, 就会自动把依赖的 jar 修改 class 文件中的 package 声明和生成对应的包, 确保不会出现类全限定名冲突的情况

使用

将以下插件放入 pom.xml 的 build >plugins 标签下


<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
  <execution>
    <phase>package</phase>
    <goals>
      <goal>shade</goal>
    </goals>
    <configuration>
      <relocations>
        <relocation>
         <!-- 表示 org.codehaus.plexus.util 包下的类都改为 org.shaded.plexus.util 包下-->
          <pattern>org.codehaus.plexus.util</pattern>
          <shadedPattern>org.shaded.plexus.util</shadedPattern>
          <!-- 指定不包含哪些包, 哪些类 -->
          <excludes>
            <exclude>org.codehaus.plexus.util.xml.Xpp3Dom</exclude>
            <exclude>org.codehaus.plexus.util.xml.pull.*</exclude>
          </excludes>
        </relocation>
      </relocations>
    </configuration>
  </execution>
</executions>
</plugin>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Maven是一个项目管理工具,它提供了一种简单的方式来管理项目的依赖关系。在使用Maven进行项目开发的过程中,我们经常会遇到引入第三方jar的需求,从而为项目提供所需的功能。 Maven提供了一种批量安装第三方jar的功能,可以通过在项目的pom.xml文件中声明依赖关系来实现。首先,我们需要找到所需的第三方jarMaven坐标,这通常括groupId、artifactId和version三个属性。 在pom.xml文件中,我们可以通过在dependencies节点下添加多个dependency节点来声明多个第三方jar的依赖关系。在每个dependency节点内,我们需要填写对应第三方jar的groupId、artifactId和version属性。 当我们保存并关闭pom.xml文件后,Maven会自动从中央仓库或私有仓库中下载并安装所需的第三方jar。这样,我们就可以在项目中直接引用这些jar,并使用其中的类和方法。 除了在pom.xml文件中声明第三方jar的依赖关系外,我们还可以使用Maven命令进行批量安装。通过执行"mvn install"命令,Maven会按照pom.xml文件中所声明的依赖关系,自动下载并安装所有的第三方jar。 总之,Maven是一个非常方便的批量安装第三方jar工具,通过在项目的pom.xml文件中声明依赖关系,我们可以轻松地管理和安装所需的第三方jar。这样,我们可以快速、高效地开发自己的项目,节省了手动下载和安装第三方jar的时间和努力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值