Ответ 1
На самом деле это зависит от многих факторов:
Если оба jar файла находятся в одном и том же ClassLoader, например, Java classpath (опция
-cp
), обычно это должен быть первый файл, найденный в порядке списка jar файлов.При развертывании в контейнере JavaEE, например, в файле EAR или в
WEB-INF/lib
или файле WAR, нет гарантии, что контейнер будет загружать один и тот же класс между двумя запусками. В этом контексте единственно верным является то, чтоWEB-INF/classes
ищется доWEB-INF/lib
В сложной иерархии ClassLoader поведение по умолчанию - поиск в родительском режиме, но в реализациях JavaEE были введены такие механизмы, как политика родительского контроля (WebSphere) или фильтрация, благодаря дескрипторам развертывания (WebLogic, JBoss/WildFly)
Можно также объявить зависимости файла jar в файле META-INF/MANIFEST.MF
благодаря атрибуту Class-Path
. Он должен обеспечивать порядок загрузки на уровне ClassLoader, особенно при запуске с java -jar myapp.jar
, но это может зависеть от реализаций в контексте JavaEE.
Примечание: при использовании проекта OpenSource может быть справедливым подать запрос на изменение и опубликовать ваши изменения или улучшения, чтобы сообщество получило от него выгоду. Тогда ваш проект может обновиться до основного потока без такой сложности диких патчей в вашем ClassPath.