загрузка класса в tomcat по запросу, когда присутствуют 2 версии библиотеки? - PullRequest
0 голосов
/ 02 июля 2018

Я искал об этом много источников из Интернета. Но все же я не смог найти конкретный ресурс, который бы точно отвечал моему вопросу.

В tomcat, есть ли порядок загрузки классов при запуске. Просто представьте ситуацию, подобную этой.

У меня есть файл myApp.war внутри веб-приложений. И в этой войне у меня есть библиотека (скажем, mylib-2.5.jar в комплекте ). И представьте, я также поместил ту же библиотеку в другую версию (скажем, mylib-2.8.jar ) в папку / lib .

Итак, когда я запускаю свое приложение и вызываю конкретную конечную точку, какая библиотека (версия) будет иметь возможность загружаться (по требованию) в JVM загрузчиком классов?

А каковы шансы на конфликт между библиотеками? и каковы причины этого?

1 Ответ

0 голосов
/ 02 июля 2018

По ссылке, опубликованной @ GyroGearless

Таким образом, с точки зрения загрузки веб-приложения, класса или ресурса выглядит в следующих репозиториях, в следующем порядке:

• Классы начальной загрузки вашей JVM

• / WEB-INF / классы вашего веб-приложения

• / WEB-INF / lib / *. Jar вашего веб-приложения

• Классы загрузчиков системных классов (описано выше)

• Общие классы загрузчиков классов (описано выше)

Если загрузчик классов веб-приложения настроен на <Loader delegate="true"/>, порядок становится следующим:

• Классы начальной загрузки вашей виртуальной машины Java

• Классы системного загрузчика классов (описанные выше)

• Общие классы загрузчика классов (описано выше)

• / WEB-INF / классы вашего веб-приложения

• / WEB-INF / lib / *. Jar вашего веб-приложения

Если загрузчик классов должен загрузить класс X, то когда он найдет его в одном месте, он не будет искать его в других местах. Конфликт Lib возможен, если вы поместите одну версию вашей зависимости (скажем, MySQL driver) в $JAVA_HOME/jre/lib/ext, а другую - в /WEB-INF/lib

...