Затенение зависимости в gradle - PullRequest
0 голосов
/ 01 ноября 2018

Я использую стороннюю зависимость, которая затеняет некоторые файлы Джексона как shaded.jackson.core. * Или shaded.jackson.databind. * И использует ее (как импорт) в своем приложении. Однако я хочу использовать версию Джексона, отличную от той, что затенена в этой зависимости. Итак, я пытался использовать функцию перемещения в Gradle, чтобы также затенить зависимости Джексона аналогично (с последней версией) для shaded.jackson, а затем использовать его.

  shadowJar {
      mergeServiceFiles()
      classifier = ''
      dependencies {
        include(dependency('com.fasterxml.jackson.core:jackson-annotations:2.9.6'))
        include(dependency('com.fasterxml.jackson.core:jackson-core:2.9.6'))
        include(dependency('com.fasterxml.jackson.core:jackson-databind:2.9.6'))
      }
      relocate 'com.fasterxml.jackson.core', 'shaded.jackson.core'
  }

Но когда я строю проект с помощью gradle, я получаю сообщение «Причина: java.lang.ClassNotFoundException: shaded.jackson.core.JsonProcessingException». Здесь «shaded.jackson.core.JsonProcessingException» вызывается из некоторого Java-класса в сторонней зависимости. Любые предложения или исправления приветствуются!

1 Ответ

0 голосов
/ 01 ноября 2018

Цель затенения состоит в том, чтобы разработчики библиотек могли включать конкретные версии своих зависимостей, не влияя на способность пользователей своей библиотеки использовать разные версии таких зависимостей. Поэтому я не знаю, почему вы пытаетесь перезаписать затененные классы Джексона другой версией. У вас наверняка будут проблемы, поскольку используемая вами сторонняя библиотека не написана для использования с Jackson версии 2.9.6.

Если вы хотите использовать Jackson 2.9.6 в коде, который вы пишете, не relocate классы, а импорт com.fasterxml.jackson.core... в классы, которые вы пишете.

...