在我的胖罐和Hadoop中冲突.jars

问题描述 投票:0回答:1

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

例如,这个较新的版本没有方法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>

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

这个旧jar直接在hadoop的classpath(/ usr / lib / hadoop-yarn-lib / *)上。

我希望类加载器能够找到捆绑的JsonReader.class,但它正在从类路径中提取它。

java maven hadoop
1个回答
0
投票

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

<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>

这应该可以防止其他json-io lib的拉动。

© www.soinside.com 2019 - 2024. All rights reserved.