时间:2022.02.23:23.04
在实际的项目中,经常会遇到依赖冲突的情况,当然,如果你是使用的MAVEN
进行的项目开发,那么你可以很简单的使用maven helper
插件进行依赖查看,例如在源码fabric-sdk-java
中就会有如下的依赖冲突
可以看到 org.miracl.milagro.amcl:milagro-crypto-java:0.4.0
依赖了com.google.guava:guava:23.0
,但是其他依赖引入的都是com.google.guava:guava:30.1.1-android
这样就存在了依赖冲突,当你想要同时保留这两个包,但是在使用时有可以在一起使用,那么你就需要使用到插件org.apache.maven.plugins:maven-shade-plugin
来处理依赖了
首先创建一个新工程,使用如下pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.miracl.milagro.amcl</groupId>
<artifactId>milagro-crypto-java</artifactId>
<version>0.4.0-shaded</version>
<dependencies>
<dependency>
<groupId>org.miracl.milagro.amcl</groupId>
<artifactId>milagro-crypto-java</artifactId>
<version>0.4.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<createDependencyReducedPom>true</createDependencyReducedPom>
<promoteTransitiveDependencies>true</promoteTransitiveDependencies>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<includes>
<include>org.miracl.milagro.amcl:milagro-crypto-java</include>
<include>com.google.guava:guava</include>
</includes>
</artifactSet>
<relocations>
<relocation>
<pattern>org.apache.milagro.amcl</pattern>
<shadedPattern>org.apache.milagro.amcl.shaded</shadedPattern>
</relocation>
<relocation>
<pattern>com.google</pattern>
<shadedPattern>com.google.shaded</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
将上面的工程打包,这样就对guava
完成了重定向工作,打好的包结构如下图所示,可以看到现在org.miracl.milagro.amcl:milagro-crypto-java:0.4.0-shaded
其实相当于是一个新包,但是功能和之前的一样,只是其中依赖的guava
作为单独的引入,并且在使用中的路径为com.google.shaded
和之前的com.google
有着明显的区别,这样就采用shaded
的方式处理好依赖冲突了
感谢您的观看,祝您生活愉快!!!
唯有热爱才能永恒!!!