Thread.currentThread().getContextClassLoader() ведет себя иначе, чем Jetty 9.4.37.v20210219

#java #classloader #jetty-9 #contextclassloader

Вопрос:

Я столкнулся с проблемой загрузки файлов ресурсов внутри веб-приложения из версии Jetty 9.4.37.v20210219 .

Я делаю Thread.currentThread().getContextClassLoader() это, чтобы получить экземпляр загрузчика классов, а затем пытаюсь получить ресурс в виде потока classLoader.getResourceAsStream("resourceFileName") . Эта строка кода возвращает значение null из версии jetty 9.4.37.v20210219 .

При проведении сравнительного исследования путем регистрации экземпляра загрузчика классов в версиях jetty 9.4.37.v20210219 и 9.4.36.v20210114 , я вижу разницу ниже

На пристани 9.4.37.v20210219 я получаю

startJarLoader@1c4af82c

но с пристанью 9.4.36.v20210114 я получаю

WebAppClassLoader{984235065}@3aaa3c39

Указывает ли startJarLoader путь к классу сервера jetty? Каков стандартный способ загрузки файлов ресурсов из веб-приложения?

Дополнительная информация, мое веб-приложение развернуто, JETTY_BASE/webapps и у меня есть файл ресурсов, который я пытаюсь загрузить в него. Это веб-приложение имеет банку зависимостей, в которой развернута JETTY_BASE/lib/ext . Thread.currentThread().getContextClassLoader() используется в методе внутри веб-приложения, который вызывается из его jar-файла зависимостей. Другими словами, вызываемый поток принадлежит банку зависимостей веб-приложения и находится в пути к классу сервера/загрузчике родительского класса. Это причина, по которой я предполагаю, но я хотел бы знать, почему эта разница видна в версиях jetty 9.4.37.v20210219 и выше.

Кстати, выполняя MyClass.class.getClassLoader() возврат WebAppClassLoader{984235065}@3aaa3c39 , я мог бы получить ресурс в виде потока, используя то же classLoader.getResourceAsStream("resourceFileName") самое, но я хотел бы знать, почему существует разница в поведении с версией jetty 9.4.37.v20210219 .

Ценю любую помощь! Заранее спасибо!