Java 使用Maven Shade插件排除工件未按预期工作
在使用Maven Shade插件构建uber jar时,我试图排除一系列工件。以下是我为此使用的配置:Java 使用Maven Shade插件排除工件未按预期工作,java,maven,maven-shade-plugin,Java,Maven,Maven Shade Plugin,在使用Maven Shade插件构建uber jar时,我试图排除一系列工件。以下是我为此使用的配置: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.3</ve
<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>
...
org.apache.maven.plugins
maven阴影插件
2.4.3
真的
com.fasterxml.jackson.core:jackson-core:jar:2.4.5
...
排除没有版本信息的软件包工作:
<exclude>com.fasterxml.jackson.core:jackson-core</exclude>
com.fasterxml.jackson.core:jackson-core
但不幸的是,这不是一个选项,因为需要包含不同版本的工件。我认为您只需要定义您正在使用的jackson版本 显然,当您具有不同版本的相同依赖项时(可能是可传递的),这是一种不好的做法。在这种情况下,您无法知道此库的哪个版本将最终出现在您的项目中。您可以替换xml中的依赖项顺序,然后最终结果将不同。听起来不太好,是吗 因此,您需要在DependencyManager部分指定的是杰克逊的确切版本:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
...
com.fasterxml.jackson.core
杰克逊核心
${jackson.version}
...
这将确保您的工件中只有特定的版本,并且不需要排除特定的版本
希望这能有所帮助谢谢Igor,具体使用依赖关系管理确实是这里的解决方案。虽然Maven Shade插件中仍然存在缺陷(或者文档中缺乏清晰性),但我想既然有解决办法,那就不是世界末日了。