Конфликт версий переходных зависимостей Clojure

#clojure #dependencies #leiningen

Вопрос:

У меня есть проект Clojure Leiningen, который имеет две зависимости A B и транзитивную зависимость X , от которой A и B зависит.

 A → X [version 1.0]
B → X [version 2.0]
 

Оба A и B являются внешними зависимостями. Проблема в том, что я не могу использовать версию 2 X для A или версию 1 X для B , так как она выбрасывает java.lang.NoSuchMethodError

Есть ли в Clojure плагин, который может помочь затенить переходные зависимости для обоих A и B или предоставить идиоматический способ решения этой проблемы?

Комментарии:

1. Возможно, стоит устранить проблему в зависимости A и отправить PR. Или, по крайней мере, отправьте запрос на обновление библиотеки.

2. ДА. Я запросил то же самое у разработчиков зависимостей A . Кажется идеальным/долгосрочным решением.

Ответ №1:

https://github.com/benedekfazekas/mranderson возможно, это то, что вы ищете, если это источник Clojure.

Комментарии:

1. Это хорошая библиотека. Он создал папку в target/srcdeps тени зависимости, которая помечена, включая все ее зависимости (переходные). Однако я видел проблемы с разрешением импорта классов java, и мне пришлось вручную исправлять их один за другим и копировать затененную зависимость обратно в исходное дерево, изменяя пространства имен, чтобы заставить ее работать. Поскольку этот подход испортит мою кодовую базу, я в конечном итоге попросил разработчиков A обновить X ее .