Найти, какая зависимость включает Spring WebApplicationInitializer - PullRequest
0 голосов
/ 13 июня 2018

У меня есть проект, который включает в себя различные зависимости Spring.

    'org.springframework:spring-core:4.3.2.RELEASE',
    'org.springframework:spring-jdbc:4.3.2.RELEASE',
    'org.springframework:spring-beans:4.3.2.RELEASE',
    'org.springframework:spring-web:4.3.2.RELEASE'

... и множество других зависимостей.

При его развертывании в Tomcat 8.5.8 я вижу этоmessage ...

1 Spring WebApplicationInitializers detected on classpath

Сообщение соответствует сообщению в исходном коде Spring-Framework по адресу SpringServletContainerInitializer.java Из этого исходного кода и документов кажется очевидным, что

  • Tomcat будет сканировать путь к классам для поиска неабстрактных классов с возможностью построения, которые реализуют WebApplicationInitializer и что SpringServletContainerInitializer создаст экземпляр каждого найденного класса.
  • Некоторые библиотеки или зависимости могут включать в себя найденный и созданный экземпляр WebApplicationInitializer.
  • Сам Spring включает в себя WebApplicationInitializer, но все они выглядят как Абстрактные.

Мой код не имеет WebApplicationInitializer.

Вопрос: Я хочу найти инициализатор, включенный в какую-то библиотеку, чтобы понять, какая библиотека включает его.

Подходы, которые приходят на ум, таковы...

  1. Получить исходный код Spring-Framework или Tomcat.Поместите точку останова в SpringServletContainerInitializer или в класс ContextConfig Tomcat и проверьте, какие классы найдены и используются.

  2. Взламывайте проект, убирая зависимости, пока не исчезнет WebApplicationInitializer.(сложный)

Разве нет лучшего (более быстрого) способа, т. е. включить какой-либо уровень ведения журнала?

Я пробовал несколькоподробные инструкции по регистрации в документах Tomcat и Spring безуспешны.

Я собираюсь получить исходный код Tomcat.Конечно, я чему-то научусь.

1 Ответ

0 голосов
/ 13 июня 2018

Сработали два метода.

  1. Получить исходный код tomcat, spring-framework, jersey и отладить процесс запуска в Netbeans .... обнаружив, что

    • Tomcat обработал ServletContainerInitializer от Jasper, собственной службы веб-сокетов Tomcat и SpringServletContainerInitializer.(ожидается / задокументировано)
    • Tomcat передал SpringServletContainerInitializer WebApplicationInitializer из Джерси с именем org.glassfish.jersey.server.spring.SpringWebApplicationInitializer, который предполагает, что у вас есть applicationContext.xml в вашем classpath в моем случае.

Это дало мне информацию, которую я искал.

Основываясь на комментариях М. Дейна, я попытался импортировать свой проект в IntelliJ и выполнить глобальный поиск (shift-shift на Mac) для WebApplicationInitializer.

  • Это работает без дальнейшей подготовки, потому что IntelliJВ глобальном поиске используется некоторая комбинация рефлексии и их Java-декомпилятора для чтения библиотечных jar-файлов и поиска использования, а затем для отображения результатов декомпилированного исходного кода.
  • Предупреждающее сообщение, которое появляется при первом отображении декомпилированного источника, делает егоclear.

Насколько мне известно, Netbeans не имеет этой опции автоматического сканирования и декомпилятора для поиска в банках зависимостей.

Самый быстрый путь к ответу,если у вас IntelliJ был глобальный поиск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...