Переопределить загрузчик классов "Родитель первый" - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть веб-приложение Java, работающее на одном узле установки сервера веб-приложений, в котором я использую библиотеку, которую я включил в свой Web-Inf, и использую в своем коде.

Проблема в том, что у меня есть другое приложение, которое добавило свои библиотеки в родительскую папку lib WebSphere, одно из которых - то же самое, что я использую, но со старой версией, создавая конфликт и блокируя мой код.

Загрузчик класса сервера вначале настроен как родительский, и я не могу изменить этот факт. У меня вопрос: как я могу заставить мое приложение использовать мою библиотеку, игнорируя приложение, используемое загрузчиком классов?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Решение состоит в том, чтобы переместить конфликтующий пакет в общую библиотеку, настроить библиотеку на использование изолированного загрузчика классов и связать эту библиотеку с вашим приложением или модулем. Параметр «изолированный загрузчик классов» создает отдельный родительский загрузчик классов для общей библиотеки, поэтому вы настраиваете это поведение только на те артефакты, которые в нем нуждаются, а не на применение его ко всему приложению или модулю.

https://www.ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/tcws_sharedlib.html

Я специально ссылаюсь на параметр «Использовать изолированный загрузчик классов для этой общей библиотеки».

0 голосов
/ 19 ноября 2018

Если вы не можете изменить настройку сервера приложений, по сути, вы можете сделать три вещи:

  1. Понизить зависимость приложения от более низкой версии, используемой сервером WebSphere, и поддерживать ее синхронизацию.,Это предпочтительнее, так как это наименее хлопотно.

  2. Отредактируйте зависимость во время сборки к вашему собственному пакету, чтобы предотвратить конфликт пакетов.Это можно сделать с помощью Maven Shade Plugin , см. Перемещение классов пример использования.

  3. Напишите новый пользовательский загрузчик классов, чтобы обойти проблему.

Я бы попробовал их в 1 -> 2 -> 3 порядке.Вариант 3 возможен, но подвержен ошибкам.Я лучше разверну на другом сервере, чем делаю.

...