uncategorized

maven-shade-plugin解决包冲突问题

使用Maven做依赖包管理的时候,经常如下问题:
A和B都依赖一个第三方库(分别是V1和V2), 但是V1和V2又是不兼容的,这个时候就很蛋疼了。
比如Guava 1.2和1.8就是不兼容的。

这个时候可以用maven-shade-plugin将A或者B打成一个独立的jar包来解决。

maven-shade-plugin 在打包时,可以将项目中依赖的 jar 包中的一些类文件打包到项目构建生成的 jar 包中,在打包的时候把类重命名
下面的配置将 org.codehaus.plexus.util jar 包重命名为 org.shaded.plexus.util

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<relocations>
<relocation>
<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>
</plugins>
</build>

使用maven-shade-plugin解决hbase和elasticsearch的依赖冲突问题
https://github.com/dadoonet/shaded-test
https://www.elastic.co/blog/to-shade-or-not-to-shade