У меня есть приложение для весенней загрузки, которое отлично работает, когда я запускаю его с помощью встроенного сервера от Intelj. Однако, когда я упаковываю его в файл .war и развертываю на tomcat, я получаю следующую ошибку:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/file-upload-0.0.1-SNAPSHOT]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:985)
at
org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalArgumentException: More than one fragment with the name [spring_web] was found. This is not legal with relative ordering. See section 8.2.2 2c of the Servlet specification for details. Consider using absolute ordering.
at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2200)
at
org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2159)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1124)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:769)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
at
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5176)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 10 more
21-Jan-2019 01:51:04.709 SEVERE [localhost-startStop-1]
org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [C:\Users\dennismo\Dev\Projects\Production Prep\file-upload-module\webapps\file-upload-0.0.1-SNAPSHOT.war]
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/file-upload-0.0.1-SNAPSHOT]]
at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:758)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:985)
at
org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Мой проект не содержит нескольких веб-фрагментов, поэтому я не знаю, что может быть причиной этой проблемы.
пом.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from salaryPaymentRequestRepo -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<akka.version>2.5.17</akka.version>
</properties>
<repositories>
<repository>
<id>default</id>
<url>http://repo.maven.apache.org/maven2</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.197</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.univocity</groupId>
<artifactId>univocity-parsers</artifactId>
<version>2.7.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>26.0-jre</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.23.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.11.0</version>
</dependency>
<dependency>
<groupId>ma.glasnost.orika</groupId>
<artifactId>orika-core</artifactId>
<version>1.4.2</version><!-- or latest version -->
<exclusions>
<exclusion>
<artifactId>javassist</artifactId>
<groupId>org.javassist</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor_2.12</artifactId>
<version>${akka.version}</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-stream_2.12</artifactId>
<version>${akka.version}</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-persistence_2.12</artifactId>
<version>${akka.version}</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-testkit_2.12</artifactId>
<version>${akka.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/resources/lib/ojdbc7-12.1.0.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Если вы используете конфигурацию JAVA, найдите ответ на странице stackoverflow.com/questions/57626140/….




Похоже, у вас есть две разные версии Spring, проверьте свои зависимости, чтобы увидеть, есть ли у вас зависимость от другой версии Spring.
mvn dependency:tree -Dverbose -Dincludes=groupId:artifactId
какая польза от зависимости mvn:tree -Dverbose -Dincludes=groupId:artifactId . Где я должен использовать это ??
Запустите его в своем терминале в корне проекта Maven, чтобы найти конфликтующие зависимости. Официальная документация Maven
Для gradle вы можете использовать параметр dependencyInsight, который можно найти в файле документация.
Как использовать опцию dependencyInsight в gradle, где мне ее найти? Эта ссылка не работает
Эта проблема была решена путем добавления абсолютного порядка дескрипторов развертывания.
В файл web.xml добавлен тег <absolute-ordering/>.
Ссылка:
https://www.oracle.com/technetwork/articles/javaee/javaee6overview-part2-136353.html
Неужели добавили в pom.xml вместо web.xml?
@Pardha Saradhi У меня та же ошибка, но я не могу использовать ваше решение, потому что оно находится в моем весеннем загрузочном приложении, где мне не нужно использовать web.xml. Тогда что я буду делать, чтобы решить эту проблему.
@ KJEjava48 KJEjava48 Я понятия не имею, как мы можем добиться этого весной. Я сделал это с помощью процесса, описанного в прикрепленной ссылке. Если вы найдете какое-либо решение, опубликуйте его. Это будет полезно другим.
У меня была такая же проблема, и я решил ее. Получил аналогичные ошибки, но не использовал весеннюю загрузку. Я использовал spring 3.x с java 8. Если приведенные выше решения не работают, измените банки и найдите, совместимы ли эти банки с используемой вами версией Java или нет. Spring 3.x несовместим с Java 8.
добавьте тег <absolute-ordering /> к вашему web.xml сразу под тегом <display-name>.
должно сработать.
Отлично! Это была важная часть решения, в котором мы нуждались, и мы не смогли бы сделать это без вас. Я разместил наше полное решение на stackoverflow.com/questions/57332888
Я использую конфигурацию на основе Java, и у меня нет файлов xml, что мне делать?
Для тех, кому нужна дополнительная информация, у меня было то же исключение, в котором также говорилось: «Подробности см. в разделе 8.2.2 2c спецификации сервлета. Рассмотрите возможность использования абсолютного порядка».... вот этот раздел: c. Исключение повторяющегося имени: если при обходе веб-фрагментов встречается несколько элементов с одним и тем же элементом <name>, приложение должно регистрировать информативное сообщение об ошибке, включая информацию, помогающую решить проблему, и не должно развертываться. Например, один из способов решить эту проблему — использовать абсолютный порядок, в этом случае относительный порядок игнорируется.
@Roman Sterlin У меня та же ошибка, но я не могу использовать ваше решение, потому что оно находится в моем весеннем загрузочном приложении, где мне не нужно использовать web.xml. Тогда что я буду делать, чтобы решить эту проблему.
Эта ошибка, по-видимому, возникает после весеннего обновления проекта, очистка файла истории проекта в tomcat webapps может решить проблему.
Да, это сработало и для меня. особ. в процессе разработки каталог WEB-INF/lib развернутого веб-приложения не очищается только из-за повторного развертывания — вам нужно его очистить. Поэтому, если вы обновите Spring, вы можете временно получить несколько версий в каталоге lib.
Я получаю эти ошибки при обновлении Spring 2.3.1 до любой более высокой версии. Также мне не помогла очистка папки webapp.
Мне помогла очистка сервера. Просто сделайте следующее:
Щелкните правой кнопкой мыши на сервере -> Очистить.
Затем повторно разверните приложение на сервере.
Это сработало для меня в eclipse IDE, +1, спасибо.
Только этот ответ помог мне. Большое Вам спасибо!!
Мой проект основан на версии Springboot (1.5.21.RELEASE), генерирует войну и развертывается на физическом коте. У меня была такая же проблема, и я решил ее с помощью нижеприведенного подхода.
Решение. Исключите зависимость tomcat-embed-websocket от spring-boot-starter-web в файле pom.xml.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.boot.version}</version>
<exclusions>
**<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
</exclusion>**
</exclusions>
</dependency>
Эта ошибка обычно возникает из-за того, что у нас есть две копии Spring в нашем контейнере, которые загружаются разными загрузчиками классов (в моем случае загрузчик общего класса и загрузчик класса веб-приложения).
Проверьте эффективный pom, если у вас есть какие-либо пакеты для встраивания пружинных банок/классов, если это так, удалите их, вы должны использовать тот, который установлен как пакет из контейнера.
Я решил аналогичную проблему, удалив все свои приложения (у меня было два разных приложения) из папки веб-приложений, а затем повторно развернул мой военный файл.
У меня была такая же проблема при создании файла войны с помощью maven, потому что я не очищал перед упаковкой, а maven включал несколько версий файлов spring jar из предыдущих сборок.
Просто ответ от новичка новичкам:
Убедитесь, что вы поместили web.xml внутри /WebContent/WEB-INF.
Я случайно поместил его в /WebContent (не /WEB-INF) и чуть не сошел с ума, пытаясь безуспешно применить некоторые из предложенных решений, сообщение об ошибке было точно таким же.
Он должен «закончиться» в your_tomcat/webapps/your_webapp_name/WEB-INF/web.xml FWIW.
Для меня это означало, что я включил несколько «затененных банок», в которых были упакованы копии весны. Так что все та же «весенняя версия», но несколько копий весны вызывают это.
Вы можете проверить, так ли это, перейдя на tomcat/webapps/your_webapp/WEB-INF/lib, распаковав все банки и выполнив поиск «spring_web».
бывший:
# first unjar everything then
WEB-INF/lib $ grep spring_web . -r
spring-web-4.3.12.RELEASE/META-INF/web-fragment.xml
7: <name>spring_web</name>
some_other_shaded_jar/META-INF/web-fragment.xml
7: <name>spring_web</name>
Если это так, вам нужно будет использовать абсолютное исправление других ответов или каким-то образом не включать несколько копий spring.
Кажется, это изменение, внесенное в tomcat 7.0.93 FWIW (поэтому он не вызывал этот сбой в более старых версиях tomcat 7)
Этот метод помог мне легко определить
Мне пришлось добавить это в web.xml, чтобы заставить его работать:
<absolute-ordering>
<name>fragment_name_if_required</name>
<others></others>
</absolute-ordering>
У меня это произошло после того, как я обновил версию Spring Framework в проекте Maven. Наконец-то я смог решить проблему, запустив mvn clean, по-видимому, старые JAR-файлы Spring собирались где-то под целевым значением.
Все эти ответы великолепны, но также проверьте, находится ли библиотека «Apache CXF» в вашем пути к классам, она явно конфликтует с Spring Web 5.2.3, для меня я временно удалил ее, потому что на самом деле я ее не использую, и теперь мой проект работает нормально.
Если вы вручную добавляете все JAR-файлы, вам необходимо удалить WEB-INF/lib/spring-web-5.2.9.RELEASE-sources.jar или аналогичный JAR-файл (возможно, ваша версия JAR-файла будет другой). Как только вы удалите эту банку, Tomcat начнет работать.
Для меня эта проблема возникла, когда Tomcat не был правильно установлен. Я переустановил и обновил путь установки по адресу:
eclipse window->preferences->runtime ENV -> path of the newly installed tomcat
После установки правильного пути все заработало.
См. строку:
Причина: java.lang.IllegalArgumentException: найдено более одного фрагмента с именем [spring_web]. Это недопустимо при относительном порядке. См. подробности в разделе 8.2.2 2c спецификации сервлета. Рассмотрите возможность использования абсолютного порядка.
который говорит использовать абсолютный порядок.
Итак, вам нужно добавить тег <absolute-ordering/> в файл web.xml внутри тега <web-app>.
Для меня это было из-за двух банок spring-web, то есть spring-web-5.02-release.jar и spring-web-sources-5.02-release.jar в пути сборки. Удалив spring-web-sources-5.02-release.jar, проблема решена.
Спасибо, наконец-то что-то сработало для меня!
Была такая же проблема и хотел добраться до первопричины. Я знал, что фрагмент jar-файла spring-web называется «spring_web». Однако в моем исходном коде больше нигде не было фрагмента spring_web. Поэтому я использовал инструмент (jfind) для поиска «spring_web» в расширенной форме моего EAR, созданного во время сборки. Удивительно, но «spring_web» был обнаружен в банке веб-фрагментов другого проекта, который был создан во время сборки. При разрешении этого второго случая проблема исчезла. Похоже, это связано с дублированием фрагмента spring_web, и нам нужен только один.
Кажется, это изменение, внесенное в tomcat 7.0.93 FWIW...