gpt4 book ai didi

java - 如何从 Web 项目中存在的依赖项 jar(使用 maven)中排除包?

转载 作者:行者123 更新时间:2023-11-30 06:53:06 24 4
gpt4 key购买 nike

我的 pom.xml 中有以下依赖项。

<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-server-client</artifactId>
<version>4.7.0-HBase-1.1</version>
</dependency>

以上是phoenix查询服务器交互 此依赖项具有 org.apache.calcite:calcite-avatica:1.6.0 传递依赖项。 calcite-avatica 依赖项有 jackson-databind(2.1.1) 的传递依赖项之一。因此 jackson-databind(version: 2.1.1) 依赖项应包含在我的项目的类路径中。但与此相反的是,jackson-databind(版本:2.1.1)中的所有类都包含在 calcite-avatica jar 中。我已将 jackson-databind(版本:2.7.2)声明为我的 pom.xml 中的直接依赖项。 我可以通过标签排除 jackson-databind(2.1.1)。 。 < org.apache.phoenix 凤凰服务器客户端 4.7.0-HBase-1.1 com.fasterxml./* jackson 数据绑定(bind)

但它并没有被排除,因为它已经捆绑在 calcite-avatica:1.6.0 jar 中。有什么解决办法吗?我尝试过 Maven 着色插件。但徒劳无功。

最佳答案

有不同的方法,但没有一个是完美的:

  • 如果您不需要 calcite-avatica jar,请将其排除(使用 Maven 排除机制。
  • 如果您需要 calcite-avatica jar 中的一些类,但不需要 jackson-databind 类,请更改声明依赖项的顺序。由于 Java 只能加载每个类一次,因此 calcite-avatica jar 的类会隐藏 jackson-databind 的类,反之亦然。
  • 创建一个“破解”的 calcite-avatica jar,其中不包含双重类。
  • 如果您真的非常需要两个不同版本的 jackson-databind,您需要尝试使用 Shade 插件构建它,但这并不容易。

关于java - 如何从 Web 项目中存在的依赖项 jar(使用 maven)中排除包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42367890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com