在使用 Maven Shade 插件构建 uber-jar 时,我试图排除一系列 Artifact 。以下是我为此使用的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<createDependencyReducedPom>true</createDependencyReducedPom>
<artifactSet>
<excludes>
<exclude>com.fasterxml.jackson.core:jackson-core:jar:2.4.5</exclude>
</excludes>
</artifactSet>
...
排除没有版本信息的包有效:
<exclude>com.fasterxml.jackson.core:jackson-core</exclude>
但不幸的是,这不是一个选项,因为确实需要包含不同版本的 Artifact 。
最佳答案
我认为您只需要定义您使用的 jackson 版本。
显然,当您对不同版本(可能是可传递的)具有相同的依赖项时,这是不好的做法。在这种情况下,您无法知道该库的哪个版本最终会出现在您的项目中。您可以替换 xml 中的依赖项顺序,然后最终结果将有所不同。听起来不太好,是吗?
那么您需要指定的内容 - 在您的 dependencyManagement 部分中的 jackson 的确切版本:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
...
这将确保您的 Artifact 中只有特定版本,并且您不需要排除特定版本。
希望对你有帮助
关于java - 使用 Maven Shade 插件排除 Artifact 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36286519/