我的胖子罐与Hadoop中的.jars冲突

时间:2019-04-17 18:40:05

标签: java maven hadoop

我很想使用json-io 4.10.1的功能。不幸的是,我的hadoop(2.8.4)版本捆绑了2.5.1版。当我的应用程序运行时,它从/ usr / lib / hadoop-yarn-lib中提取json-io而不是应用程序.jar中捆绑的类。

例如,此较新版本不具有带有第二个接受参数的参数的JsonReader.jsonToJava方法,并且此版本在将对象映射到json或从json映射中做得更好。

在执行应用程序时,出现错误,提示找不到合适的方法。最终,作为权宜之计,我删除了/usr/lib/hadoop-yarn-lib/json-io-2.5.1.jar文件,该应用程序找到了“本地”版本并成功运行。

因此,在我的pom.xml中,我将json-io声明为依赖项:

<dependency>
  <groupId>com.cedarsoftware</groupId>
  <artifactId>json-io</artifactId>
  <version>4.10.1</version>
</dependency>

我已经配置了shade插件来创建一个胖的.jar。最终的jar确实包含来自正确版本的json-io的JsonReader.class。

这个较旧的jar直接位于hadoop的类路径(/ usr / lib / hadoop-yarn-lib / *)上。

我希望类加载器找到捆绑的JsonReader.class,但是它将从类路径中拉出一个。

1 个答案:

答案 0 :(得分:0)

在Maven中,您可以排除更深的依赖关系:

constexpr int

这应该防止拉出另一个<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-yarn</artifactId> <version>3.2.0</version> <exclusions> <exclusion> <groupId>com.cedarsoftware</groupId> <artifactId>json-io</artifactId> </exclusion> </exclusions> </dependency> 库。