Java奇巧淫技

maven-shade-plugin实现依赖隐藏

2020-10-20  本文已影响0人  Chermack

在开发一个通用组件时,难免需要借助一些第三方工具帮我们快速实现功能。而我们的通用组件的用户,很可能需要与我们使用相同的工具,如果依赖的组件版本不一致,很有可能造成依赖冲突。除了让使用方排除冲突的公共依赖(很有可能排除任意一方都会造成版本不兼容),还可以使用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>。

上一篇下一篇

猜你喜欢

热点阅读