【问题标题】:Excluding artifacts with Maven Shade plugin is not working as expected使用 Maven Shade 插件排除工件未按预期工作
【发布时间】:2016-07-17 03:20:55
【问题描述】:

在使用 Maven Shade 插件构建 uber-jar 时,我试图排除一系列工件。以下是我为此使用的配置:

        <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>

但不幸的是,这不是一个选项,因为确实需要包含不同版本的工件。

【问题讨论】:

    标签: java maven maven-shade-plugin


    【解决方案1】:

    我认为您只需要定义您使用的杰克逊版本。

    显然,当您具有不同版本的相同依赖项(可能是传递性的)时,这是一种不好的做法。在这种情况下,您无法知道该库的哪个版本最终会出现在您的项目中。您可以替换xml中的依赖顺序,然后最终结果会有所不同。听起来不太好,是吗?

    所以你需要在你的dependencyManagement部分指定确切版本的jackson:

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>${jackson.version}</version>
        </dependency>
     ...
    

    这将确保您的工件中只有特定版本,您不需要排除特定版本。

    希望对你有帮助

    【讨论】:

    • 感谢 Igor,具体使用依赖管理确实是这里的解决方案。虽然 Maven Shade 插件中仍然存在错误(或文档中缺乏清晰性),但我想既然有解决方法,它不是世界末日。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2012-03-04
    • 2020-01-08
    • 2016-08-31
    • 2011-10-30
    相关资源
    最近更新 更多