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

标签 java maven maven-shade-plugin

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

相关文章:

java - if(null check)-else vs try catch(NullPointerException) 哪个效率更高?

Java不能做声明?

maven - 在 Maven 中对依赖项进行着色

java - 如何在 maven-shade-plugin 创建的 Jar 中包含测试类?

java - 阴影 JAR 的传递依赖

java - 如何向我的服务器添加线程?

Java 排序集合

java - 使用 Maven 使用 OpenCV 构建 Java 项目

java - 从依赖项中仅导入几个类

java - TomEE 中部署 org.springframework.context.ApplicationListener 异常