Модули Java 9 — конфликт зависимостей сторонних библиотек

Могут ли модули Java 9 помочь в разрешении конфликта зависимостей? Я включил две зависимости, protobuf-java и protobuf-lite, обе они содержат одни и те же классы в одних и тех же пакетах (FQN), проблема в том, что реализации немного отличаются друг от друга. Обе зависимости исходят из двух разных банок, и мне нужны обе в одном модуле. Проблема в том, что загрузчик классов берет только первый в пути к классам, что приводит к неожиданному поведению, такому как NoSuchMethodError или NoClassDefFoundError.

У вас есть идеи, как я могу решить эту проблему? Я думаю, мне нужно принудительно загрузить эти зависимости разными загрузчиками классов, верно? Не могли бы вы привести несколько примеров, которые показывают, как с этим бороться?


person minizibi    schedule 12.01.2021    source источник
comment
У вашей проблемы есть имя: Jar Hell. Это не очень помогает в решении проблемы, но может заставить вас чувствовать себя немного лучше ;-)   -  person Hulk    schedule 12.01.2021
comment
Зачем нужны и protobuf-java, и protobuf-lite? Нет ли способа, которым вы можете просто использовать один или другой? И нет, JPMS на самом деле не решает Jar Hell, насколько я понимаю (хотя JPMS, вероятно, приведет к сбою вашего приложения при запуске, а не через некоторое время).   -  person Slaw    schedule 12.01.2021
comment
Связано (хотя об использовании разных версий в разных модулях): java-platform-modules" title="с использованием разных версий зависимостей в отдельных модулях платформы Java"> stackoverflow.com/questions/45283886/   -  person Hulk    schedule 12.01.2021