使用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