本文主要是介绍maven shade插件来解决 fatjar中的包和执行环境里的包冲突问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
https://medium.com/@minyodev/relocating-classes-using-apache-maven-shade-plugin-6957a1a8666d
比如fatjar中,需要用一个 A版本的包foo-pkg, 在环境里需要用到B版本的包foo-pkg
光在maven冲突里排除掉是没有用
需要使用 shade插件的重定向功能
1. 首先还是要先排除包冲突
2. 然后使用shade插件的重定向功能, 将最终要用到的包的某个类package重命名一下
这样,代码里用到的都是 1里面冲突解决后的版本
参考下面的标红部分, https://medium.com/@minyodev/relocating-classes-using-apache-maven-shade-plugin-6957a1a8666d
<!-- ModuleB's pom.xml -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<shadedArtifactAttached>false</shadedArtifactAttached>
<artifactSet>
<includes>
<include>*:*</include>
</includes>
</artifactSet>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<relocations combine.children="append">
<relocation>
<pattern>io.netty</pattern>
<shadedPattern>
com.shaded_package.io.netty
</shadedPattern>
<includes>
<include>io.netty.**</include>
</includes>
</relocation>
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
这篇关于maven shade插件来解决 fatjar中的包和执行环境里的包冲突问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!