如何在maven中遮蔽包及其所有依赖项?

时间:2016-11-03 16:53:29

标签: maven

我们希望对第三方库(例如:reset_index())及其所有依赖项进行着色,并使用不同的包名重新打包它们,以便最终jar在包含在其他项目中时不会出现版本冲突。

这是pom.xml:

com.esotericsoftware.kryo

当我查看最终的着色jar文件时,我发现只有<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>example.shade.group</groupId> <artifactId>myproj-shade-kryo</artifactId> <name>myproj-shade-kryo</name> <version>1.0.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.esotericsoftware.kryo</groupId> <artifactId>kryo</artifactId> <version>2.21</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.2</version> <configuration> <createSourcesJar>true</createSourcesJar> <artifactSet> <includes> <include>com.esotericsoftware.kryo:kryo</include> </includes> </artifactSet> <filters> <filter> <artifact>com.esotericsoftware.kryo:kryo</artifact> </filter> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <relocations> <relocation> <pattern>com.esotericsoftware.kryo</pattern> <shadedPattern>example.shade.group.kryo</shadedPattern> </relocation> </relocations> </configuration> <executions> <execution> <id>package</id> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project> 被重新包装,而不是kryo的依赖。

如果我不重新打包kryo的依赖关系,那么如果我的jar用户包含其他版本的kryo,那些依赖关系中的版本冲突可能仍然存在。

如果我打包kryo的所有依赖项,那么对所有依赖项执行此操作可能会很快变得非常痛苦。

这种情况的推荐解决方案是什么?

0 个答案:

没有答案