在开发一个通用组件时,难免需要借助一些第三方工具帮我们快速实现功能。而我们的通用组件的用户,很可能需要与我们使用相同的工具,如果依赖的组件版本不一致,很有可能造成依赖冲突。除了让使用方排除冲突的公共依赖(很有可能排除任意一方都会造成版本不兼容),还可以使用maven-shade-plugin对通用组件的依赖进行隐藏,这样就可以依赖于各自的版本而不发生冲突。
<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>
<!-- <minimizeJar>true</minimizeJar>-->
<shadedArtifactAttached>false</shadedArtifactAttached>
<createDependencyReducedPom>true</createDependencyReducedPom>
<createSourcesJar>false</createSourcesJar>
<shadeSourcesContent>true</shadeSourcesContent>
<relocations>
<relocation>
<pattern>org.slf4j</pattern>
<shadedPattern>org.myself.toolkit.slf4j</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
例如隐藏slf4j的方法如上,项目打包时会将org.slf4j一同打包,并将包名字段中的org.slf4j替换为org.myself.toolkit.slf4j。当其他项目引入该项目时,即使其他项目也依赖于slf4j,但这两个版本都能独立工作,唯一的缺点会使jar包体积变大。如果要隐藏多个依赖可以添加多个<relocation></relocation>。
网友评论