有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Maven Shade插件排除工件的java未按预期工作

在使用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>

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


共 (1) 个答案

  1. # 1 楼答案

    我想你只需要定义一下你使用的是哪个版本的杰克逊

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

    因此,您需要在dependencyManagement部分指定杰克逊的确切版本:

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

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

    希望这有帮助