解决两个依赖的全限定类名完全相同问题

介绍

我们会经常在maven项目中,依赖第三方的sdk或者api。当依赖的多了就会发生一个问题。例如有2个依赖的某个类的包名和类名完全相同,但这两个依赖的这个类的方法不完全相同。这就不好办了。用一个,另一个就会有问题。

解决

至于网上说的那种自定义类加载器也不现实,因为这两个依赖的类的方法不相同。就算用自定义类加载器,那代码本身不还是报错吗。

所以这里我们借用maven的一个插件,叫maven-shade-plugin

案例

<dependencies>
    <dependency>
        <groupId>com.yun1</groupId>
        <artifactId>oos-yun1-sdk</artifactId>
        <version>6.5.0</version>
    </dependency>
    <dependency>
        <groupId>com.yun2</groupId>
        <artifactId>oos-yun2-sdk</artifactId>
        <version>1.7.0</version>
    </dependency>
</dependencies>
<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>
                            <artifactSet>
                                <includes>
                                	<!-- 指定依赖 -->
                                    <include>com.yun2:oos-yun2-sdk</include>
                                </includes>
                            </artifactSet>
                            <relocations>
                                <relocation>
                                	<!-- 原先包名 -->
                                    <pattern>com.yun</pattern>
                                    <!-- 修改后包名 -->
                                    <shadedPattern>com.my.yun</shadedPattern>
                                </relocation>
                            </relocations>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
	</plugins>
</build>
  • 比如说依赖了两个依赖yun1-sdk、yun2-sdk。这两个sdk都有个类叫 com.yun.FileOs

这时就可以通过maven的插件maven-shade-plugin,指定要修改的依赖,然后将之前包名可以指定为修改后的包名。修改包名的源码会被打包在项目中。这样yun2-sdk中就变成了com.my.yun.FileOs 这样两个类就不冲突了。

注意

maven-shade-plugin插件只会在进行maven打包时候生效。在本地编译器idea启动项目,插件还是不生效的,代码依旧会冲突报错。所以我们可以将这两个依赖和插件放到另一个项目组件包中,将这个组件包打好包后上传到maven私服中。然后要调用此两个sdk的项目依赖这个打好的组件包。这样的话本地编译器idea启动也是没有问题的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值