2017-02-21 33 views
1

我在我的pom.xml中有以下依赖项。上述如何从Web项目中存在的依赖关系jar(使用maven)中排除程序包?

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

是凤凰查询服务器interacaction 这种依赖性有org.apache.calcite:方解石avatica:1.6.0传递依赖。方解石 - 阿瓦蒂卡依赖具有杰克逊数据绑定(2.1.1)其传递依赖之一。所以jackson-databind(版本:2.1.1)依赖项应该包含在我的项目的类路径中。但相反,jackson-databind(version:2.1.1)中的所有类都包含在方解石avatica jar中。我在我的pom.xml中声明了jackson-databind(version:2.7.2)作为直接依赖项。 我可以通过标记排除jackson-databind(2.1.1)。 。 < org.apache.phoenix 凤凰 - 服务器 - 客户端4.7.0 - HBase的-1.1 com.fasterxml./* 杰克逊,数据绑定

但它没有得到排除,因为它有被捆绑在方解石avatica:1.6.0罐。有没有解决方案。我已经尝试了maven shaded插件。但徒劳无益。

回答

1

有不同的方法,没有人是完美的。

  • 如果您不需要方解石avatica罐,排除它(使用Maven排除机制
  • 如果你需要从一些类calcite-avatica jar,但不是jackson-databind类,改变你声明依赖关系的顺序。因为Java只能加载一个类,所以方解石avatica jar的类会隐藏jackson-databind的类,反之亦然。
  • 创建一个“hacked”方解石 - 阿瓦蒂卡罐,它不包含加倍类。
  • 如果你确实需要两种不同版本的jackson-databind,你需要尝试用阴影插件来构建它,但这并不容易。
+0

我创建了一个黑客方解石 - 阿瓦蒂卡瓶。 @JF MeierI需要知道在哪种情况下,将在pom.xml中声明的依赖关系jar的类添加到最终的jar中。例如,(虽然我已经提到但是改写)方解石avatica声明在它的pom.xml中的杰克逊数据绑定的依赖但不是下载jackaon-databind jar它将类放在calcite activa jar? –

+0

我需要在我的项目中包含方解石 - 阿瓦蒂卡罐。我只需要一个版本的jackson-databind jar –

+0

有些人使用maven-shade-plugin将所有依赖关系整合到他们的jar中 - 这会导致像上面那样的问题。通常的做法是不做这件事。 –

相关问题