Программисты, использующие Java/Maven, часто сталкиваются с проблемами, связанными с XML-парсером Xerces. Это библиотека широко используется в экосистеме Java и сопровождает многие библиотеки и фреймворки. Однако, работа с Xerces может вызывать ряд трудностей.
История Xerces
Xerces является одним из наиболее популярных XML-парсеров в экосистеме Java и используется многими библиотеками и фреймворками. Однако, его использование может вызвать ряд проблем. Основные из них связаны с тем, что разработчики Xerces не используют Maven для распространения своих релизов. В результате, официальные бинарные файлы Xerces не версионированы. Например, файл реализации Xerces 2.11.0 называется xercesImpl.jar
, а не xercesImpl-2.11.0.jar
.
Проблемы
Конфликт разрешения
Многие организации публикуют и используют свои собственные сборки Xerces в своих POM-файлах. Это может не вызывать проблем при работе с небольшими приложениями, но в случае крупного программного обеспечения, где используется несколько репозиториев, могут возникнуть конфликты.
Ад загрузчика классов
Как уже было упомянуто, JRE поставляется с Xerces в составе JAXP RI. Было бы логично отметить все зависимости Xerces в Maven как <exclusion>
или <provided>
, но код от сторонних разработчиков может или не может работать с версией, предоставленной в JAXP JDK. Кроме того, нужно учесть, что Xerces поставляется вместе с контейнерами сервлетов. Это приводит к дилемме: удалить версию сервлета и надеяться, что контейнер будет работать на версии JAXP? Или оставить версию сервлета и надеяться, что фреймворки приложений будут работать на версии сервлета?
Решения
Один из подходов к решению проблемы с Xerces — отметить все зависимости Xerces в Maven как <provided>
или <exclusion>
. Однако, это может быть сложно сделать, особенно при работе в большой команде, поскольку артефакты Xerces имеют множество синонимов (xml-apis
, xerces
, xercesImpl
, xmlParserAPIs
и т.д.).
Возможное решение — глобально исключить все зависимости Xerces и заставить все фреймворки/библиотеки использовать версию JAXP. Данное решение может помочь избежать проблем с версионированием и конфликтами при работе с Xerces.
Добавить комментарий