Вопрос или проблема
СЕРЬЕЗНО: У дочернего контейнера произошла ошибка при запуске
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Не удалось запустить компонент [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Spring_MVC_DinamicWebPages]]
at java.util.concurrent.FutureTask.report(Неизвестный источник)
at java.util.concurrent.FutureTask.get(Неизвестный источник)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
at java.util.concurrent.FutureTask.run(Неизвестный источник)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(Неизвестный источник)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:738)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Нативный метод)
at sun.reflect.NativeMethodAccessorImpl.invoke(Неизвестный источник)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Неизвестный источник)
at java.lang.reflect.Method.invoke(Неизвестный источник)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
Причина: org.apache.catalina.LifecycleException: Не удалось запустить компонент [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Spring_MVC_DinamicWebPages]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
at java.util.concurrent.FutureTask.run(Неизвестный источник)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(Неизвестный источник)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
… еще 21
Причина: java.lang.IllegalArgumentException: Найдено более одного фрагмента с именем [spring_web]. Это незаконно с относительным порядком. См. раздел 8.2.2 2c спецификации сервлетов для получения подробной информации. Рассмотрите возможность использования абсолютного порядка.
at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2260)
at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2218)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1342)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:983)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:302)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5044)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
… еще 27
19 июля 2020 г. 22:25:50 org.apache.catalina.core.ContainerBase startInternal
СЕРЬЕЗНО: У дочернего контейнера произошла ошибка при запуске
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: У дочернего контейнера произошла ошибка при запуске
at java.util.concurrent.FutureTask.report(Неизвестный источник)
at java.util.concurrent.FutureTask.get(Неизвестный источник)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:738)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Нативный метод)
at sun.reflect.NativeMethodAccessorImpl.invoke(Неизвестный источник)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Неизвестный источник)
at java.lang.reflect.Method.invoke(Неизвестный источник)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
Причина: org.apache.catalina.LifecycleException: У дочернего контейнера произошла ошибка при запуске
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:928)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
at java.util.concurrent.FutureTask.run(Неизвестный источник)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(Неизвестный источник)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
… еще 13
Причина: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Не удалось запустить компонент [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Spring_MVC_DinamicWebPages]]
at java.util.concurrent.FutureTask.report(Неизвестный источник)
at java.util.concurrent.FutureTask.get(Неизвестный источник)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
… еще 21
Причина: org.apache.catalina.LifecycleException: Не удалось запустить компонент [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Spring_MVC_DinamicWebPages]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
at java.util.concurrent.FutureTask.run(Неизвестный источник)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(Неизвестный источник)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
… еще 21
Причина: java.lang.IllegalArgumentException: Найдено более одного фрагмента с именем [spring_web]. Это незаконно с относительным порядком. См. раздел 8.2.2 2c спецификации сервлетов для получения подробной информации. Рассмотрите возможность использования абсолютного порядка.
at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2260)
at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2218)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1342)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:983)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:302)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5044)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
… еще 27
19 июля 2020 г. 22:25:50 org.apache.coyote.AbstractProtocol pause
ИНФОРМАЦИЯ: Приостановка ProtocolHandler [“http-nio-8080”]
19 июля 2020 г. 22:25:50 org.apache.catalina.core.StandardService stopInternal
ИНФОРМАЦИЯ: Остановка службы [Catalina]
19 июля 2020 г. 22:25:50 org.apache.coyote.AbstractProtocol destroy
ИНФОРМАЦИЯ: Уничтожение ProtocolHandler [“http-nio-8080”]
Это фатальная ошибка, которую я получаю. Я пытался и переустанавливал eclipse, а также Tomcat, но это не сработало.
Ответ прямо там в трассировке стека:
Обнаружено более одного фрагмента с именем [spring_web]. Это незаконно с относительным порядком. См. раздел 8.2.2 2c спецификации сервлетов для получения подробной информации. Рассмотрите возможность использования абсолютного порядка.
У вас есть несколько JAR-файлов в WEB-INF/lib (и, возможно, $CATALINA_BASE/lib в зависимости от конфигурации), которые содержат META-INF/web-fragment.xml
, который объявляет имя spring_web
. Это незаконно, поэтому Tomcat отказывается запускать приложение.
Скорее всего, у вас есть несколько версий и/или копий одного или нескольких JAR-файлов Spring. Убедитесь, что у вас есть только один, и приложение запустится (или, по крайней мере, дойдет до более позднего времени, прежде чем оно завершится по какой-либо другой причине).
Ответ или решение
Причины ошибки Tomcat 9 и их решения
Ошибка, указанная в вашем запросе, GRAVE: A child container failed during start
, возникает при попытке запустить веб-приложение на сервере Tomcat 9. Важный фрагмент стектрейса указывает на причину проблемы, а именно:
More than one fragment with the name [spring_web] was found. This is not legal with relative ordering.
Эта ошибка говорит о том, что в вашем проекте или его зависимостях имеется более одного фрагмента с именем spring_web
, что запрещено спецификацией Servlet. Так как вы можете иметь разные JAR-файлы, все из которых содержат META-INF/web-fragment.xml
, это приводит к конфликту.
Шаги по устранению проблемы
1. Проверка зависимостей
Убедитесь, что в папке WEB-INF/lib
вашего проекта и, возможно, в папке $CATALINA_BASE/lib
нет дублирующихся или конфликтующих зависимостей. Это могут быть разные версии библиотек Spring, содержащие одинаковый фрагмент.
- Проверьте наличие нескольких версий библиотеки Spring в проекте.
- Полезно использовать инструмент сборки, например Maven или Gradle, чтобы упростить управление зависимостями.
2. Удаление дубликатов
Если вы обнаружили дубликаты:
- Выберите единственную версию библиотеки, которая соответствует вашим требованиям.
- Удалите все лишние версии из папки
WEB-INF/lib
.
3. Использование абсолютного порядка
Если вам необходимо использовать несколько фрагментов с одинаковым именем (что может быть оправдано в сложных проектах), вы можете указать абсолютный порядок в файле web.xml
. Например:
<web-app>
...
<web-fragment>
<name>spring_web</name>
<ordering>absolute</ordering>
</web-fragment>
...
</web-app>
Однако такой подход следует использовать с осторожностью, так как это может привести к другим конфликтам.
4. Проверка другого кода и конфигурации
После того как вы устранили проблему с дублированием фрагментов, стоит перепроверить другие части вашего проекта на наличие ошибок конфигурации, которые могут помешать нормальному запуску Tomcat.
Заключение
Ошибка A child container failed during start
, которую вы наблюдаете, как правило, связана с конфликтами зависимостей. Тщательно проверив и исправив зависимости вашего проекта, вы сможете устранить проблему, позволяя вашему веб-приложению корректно запускаться на Tomcat 9. Если у вас остались вопросы или возникают новые ошибки, рассмотрите возможность проверки логов на наличие дополнительных сообщений об ошибках.
Это поможет не только восстановить работоспособность вашего проекта, но и в дальнейшем избежать аналогичных проблем.