Gradle - что делать, если ваша среда выполнения использует разные Jars? - PullRequest
0 голосов
/ 24 марта 2020

Я дважды сталкивался с этой проблемой и задавался вопросом, есть ли решение для нее:

Допустим, у меня есть проект Project, который зависит от SomeClass. SomeClass зависит от Dependency версии n.

Теперь предположим, что Project развертывается как плагин / подпрограмма или отдельный запускаемый модуль в некоторой среде. Среда сама по себе является программой (скажем, я пишу плагин в программу), и она зависит от Dependency версии m, где m <<code>n. При развертывании среда будет использовать самую безопасную версию Dependency, в данном случае m, чтобы не взломать sh основной программы. Однако, поскольку в моем плагине есть методы, которые присутствуют в версии n, но не m, я теперь получаю исключение MethodNotFoundException.

Есть ли способ упаковать плагин Project, чтобы он использует n и программа все еще может использовать m? Может как модуль переименовать?

1 Ответ

0 голосов
/ 24 марта 2020

В итоге я узнал о плагине Shadow , поэтому комментарий Bjorn Vester выше.

В моем build.gradle я сделал

shadowJar {
    relocate 'com.reference.to.dependency', 'myprojectreference.shadow.reference.to.dependency'
}

(Обратите внимание, что второй аргумент для перемещения не должен соответствовать указанному шаблону c - я использую ссылку моего проекта, чтобы избежать случайно создавая новые столкновения вместе с shadow).

И мой новый теневой сосуд работал нормально.

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