Требуется понимание spring.handlers и spring.schemas

У меня есть некоторые вопросы, вытекающие из проблемы, которую я уже решил через этот другой вопрос. Тем не менее, я все еще удивляюсь первопричине. Мои вопросы таковы:

  • В чем цель spring.handlers и spring.schemas?

Как я понимаю, это способ сообщить Spring Framework, где найти xsd, чтобы все было правильно подключено и загружено. Но...

  1. В каких обстоятельствах я должен иметь эти два файла в папке META-INF?

  2. В моем другом вопросе, связанном выше, кто-нибудь знает, почему мне пришлось добавить maven-shade-plugin для создания этих двух файлов (на основе всех моих зависимостей) в META-INF? Другими словами, что было причиной ROOT CAUSE, которая заставила меня использовать плагин maven shade?

Ответы

Ответ 1

Какова цель spring.handlers и spring.schemas?

ну вы более или менее нашли это сами, добавьте еще несколько деталей:

некоторые библиотеки spring содержат spring.schemas и файл spring.handlers внутри каталога META-INF

META-INF/ spring.schemas

  • re-maps (*) схемация к xsd внутри библиотеки
  • (абстрактно), только эта переименованная версия поддерживается этой библиотекой

META-INF/ spring.handlers

  • предоставляет классы обработчиков пространства имен для определенных пространств имен
  • класс обработчика пространства имен обеспечивает логику синтаксического анализа для анализа spring -batch beans, как работа, шаг и т.д.

(*) фактическое повторное сопоставление происходит во время сборки контекста приложения spring


При каких обстоятельствах я должен иметь эти два файла под Папка META-INF?

обычно файлы находятся внутри используемых вами библиотек spring, но вы можете использовать механизм для реализации собственного пространства имен bean, тогда у вас будут собственные файлы


В моем другом вопросе, связанном выше, кто-нибудь знает, почему мне пришлось добавить плагин maven-shade для создания этих двух файлов (на основе всех моих зависимостей) в рамках META-INF? Другими словами, какова была КОРНЕЖНАЯ ПРИЧИНА что заставило меня использовать плагин maven shade?

если вы используете пространство имен spring в конфигурации spring, вам нужны соответствующие файлы

проблема возникает, когда вы хотите запустить Java-приложение:

  • с основным классом
    • Библиотеки spring должны находиться в пути к классам
    • или все объединяется в одну банку, которая должна находиться в пути к классам (*)
  • как приложение для сервера war/ear, spring libaries должны быть на пути к классам, обычно внутри войны

Я предполагаю, что вы не запустили основной класс с полным пулом классов, и я обновил свой ответ для вашего первого вопроса.

(*), если вы объедините все в одну банку, вы должны убедиться, что содержимое всех файлов spring.schemas/spring.handlers объединено в один spring.schemas и один spring.handlers, см. этот ответ для конфигурации с maven для создания all-in-one.jar