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

时间:2017-02-21 12:53:28

标签: java maven

我的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传递依赖。方解石 - avatica依赖关系具有jackson-databind(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         凤凰 - 服务器 - 客户端         4.7.0-HBase的-1.1                                            com.fasterxml./*                    杰克逊 - 数据绑定                                        

但它并没有被排除在外,因为它已被捆绑在方解石 - avatica:1.6.0 jar中。对此有什么解决方案吗?我试过maven阴影插件。但是徒劳无功。

1 个答案:

答案 0 :(得分:1)

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

  • 如果您不需要方解石 - avatica jar,请将其排除(使用Maven排除机制。
  • 如果您需要来自calcite-avatica jar的某些类,而不是jackson-databind类,请更改声明依赖项的顺序。因为Java只能加载每个类一次,所以calcite-avatica jar的类都隐藏了jackson-databind的类,反之亦然。
  • 创建一个“黑客”方解石 - avatica jar,它不包含doubled类。
  • 如果你真的需要两个不同版本的jackson-databind,你需要尝试使用shade插件来构建它,但这并不容易。