Конфликтующие .jars в моей толстой банке против Hadoop - PullRequest
0 голосов
/ 17 апреля 2019

Я бы хотел использовать возможности json-io 4.10.1.К сожалению, моя версия hadoop (2.8.4) включает версию 2.5.1.Когда мое приложение запускается, оно извлекает json-io из / usr / lib / hadoop-yarn-lib вместо классов, входящих в мое приложение .jar.

Эта более новая версия, например, не имеетметод JsonReader.jsonToJava со вторым аргументом, который принимает параметры, и эта версия лучше справляется с отображением моих объектов в / из 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-файл содержит JsonReader.class из правильной версии json-io.

Этот старый jar-файл находится непосредственно в пути к классам hadoop (/usr/lib/hadoop-yarn-lib/*).

Я ожидаю, что загрузчик классов найдет связанный JsonReader.class, но он извлекает его из пути к классам.

1 Ответ

0 голосов
/ 18 апреля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...