Я запускаю Tomcat 9, и он продолжает говорить: GRAVE: Дочерний контейнер не удалось запустить.

Вопрос или проблема

СЕРЬЕЗНО: У дочернего контейнера произошла ошибка при запуске
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. Если у вас остались вопросы или возникают новые ошибки, рассмотрите возможность проверки логов на наличие дополнительных сообщений об ошибках.

Это поможет не только восстановить работоспособность вашего проекта, но и в дальнейшем избежать аналогичных проблем.

Оцените материал
Добавить комментарий

Капча загружается...