如何从Web项目中存在的依赖关系JAR(使用Maven)中排除软件包



我在我的pom.xml中具有以下依赖关系。

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

以上是用于凤凰城查询服务器间的目标 此依赖关系具有org.apache.calcite:方解石 - avatica:1.6.0传递依赖性。方解石 - 阿瓦蒂亚依赖性具有杰克逊 - 戴塔宾德(2.1.1)的及其依赖性之一。因此,杰克逊·戴塔宾德(Jackson-Databind)(版本:2.1.1)的依赖性应包括在我的项目的集体路径中。但是,杰克逊 - 戴塔宾德(Jackson-Databind)(版本:2.1.1)中的所有类都包含在方解石 - 阿瓦蒂卡(Avatica Jar)中。我已将Jackson-Databind(版本:2.7.2)宣布为我的pom.xml中的直接依赖性。 我可以通过标签排除Jackson-Databind(2.1.1)。。&lt; org.apache.phoenix Phoenix-Server-Client 4.7.0-Hbase-1.1 com.fasterxml./* 杰克逊·戴塔宾德(Jackson-Databind)

,但由于它已捆绑在方解石 - 阿瓦蒂卡(Avatica):1.6.0 jar,因此没有被排除在外。是否有任何解决方案。我尝试了Maven Shaded插件。但是徒劳的。

有不同的方法,它们都不是完美的:

  • 如果您不需要方解石 - 瓦蒂卡罐,请将其排除(使用Maven排除机制。
  • 如果您需要Colcite-Avatica Jar中的某些类,而不是Jackson-Databind类,请更改您声明依赖项的顺序。因为Java只能加载每个类,所以Colcite-avatica Jar的类隐藏了杰克逊 - 戴塔宾德的类别,反之亦然。
  • 创建一个不包含双重类别的"黑客"方解石 - 阿瓦蒂亚罐。
  • 如果您真的需要两个不同版本的杰克逊·戴塔宾德

最新更新