Найдено более одного фрагмента с именем [spring_web]. Это не законно с относительным порядком

У меня есть приложение для весенней загрузки, которое отлично работает, когда я запускаю его с помощью встроенного сервера от 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>

Кажется, это изменение, внесенное в tomcat 7.0.93 FWIW...

rogerdpack 06.07.2020 22:19

Если вы используете конфигурацию JAVA, найдите ответ на странице stackoverflow.com/questions/57626140/….

Umer Khalid 22.11.2020 11:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
38
2
69 089
20
Перейти к ответу Данный вопрос помечен как решенный

Ответы 20

Ответ принят как подходящий

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

mvn dependency:tree -Dverbose -Dincludes=groupId:artifactId

какая польза от зависимости mvn:tree -Dverbose -Dincludes=groupId:artifactId . Где я должен использовать это ??

KJEjava48 18.08.2019 18:42

Запустите его в своем терминале в корне проекта Maven, чтобы найти конфликтующие зависимости. Официальная документация Maven

David Simonsbacka 19.08.2019 19:32

Для gradle вы можете использовать параметр dependencyInsight, который можно найти в файле документация.

David Simonsbacka 26.08.2019 08:13

Как использовать опцию dependencyInsight в gradle, где мне ее найти? Эта ссылка не работает

KJEjava48 06.10.2020 08:34

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

В файл web.xml добавлен тег <absolute-ordering/>.

Ссылка:

https://www.oracle.com/technetwork/articles/javaee/javaee6overview-part2-136353.html

Неужели добавили в pom.xml вместо web.xml?

Selaron 15.03.2019 08:39

@Pardha Saradhi У меня та же ошибка, но я не могу использовать ваше решение, потому что оно находится в моем весеннем загрузочном приложении, где мне не нужно использовать web.xml. Тогда что я буду делать, чтобы решить эту проблему.

KJEjava48 23.08.2019 18:07

@ KJEjava48 KJEjava48 Я понятия не имею, как мы можем добиться этого весной. Я сделал это с помощью процесса, описанного в прикрепленной ссылке. Если вы найдете какое-либо решение, опубликуйте его. Это будет полезно другим.

Pardha Saradhi 10.09.2019 12:18

У меня была такая же проблема, и я решил ее. Получил аналогичные ошибки, но не использовал весеннюю загрузку. Я использовал spring 3.x с java 8. Если приведенные выше решения не работают, измените банки и найдите, совместимы ли эти банки с используемой вами версией Java или нет. Spring 3.x несовместим с Java 8.

добавьте тег <absolute-ordering /> к вашему web.xml сразу под тегом <display-name>. должно сработать.

Отлично! Это была важная часть решения, в котором мы нуждались, и мы не смогли бы сделать это без вас. Я разместил наше полное решение на stackoverflow.com/questions/57332888

DavesPlanet 02.08.2019 22:12

Я использую конфигурацию на основе Java, и у меня нет файлов xml, что мне делать?

KJEjava48 18.08.2019 18:42

Для тех, кому нужна дополнительная информация, у меня было то же исключение, в котором также говорилось: «Подробности см. в разделе 8.2.2 2c спецификации сервлета. Рассмотрите возможность использования абсолютного порядка».... вот этот раздел: c. Исключение повторяющегося имени: если при обходе веб-фрагментов встречается несколько элементов с одним и тем же элементом <name>, приложение должно регистрировать информативное сообщение об ошибке, включая информацию, помогающую решить проблему, и не должно развертываться. Например, один из способов решить эту проблему — использовать абсолютный порядок, в этом случае относительный порядок игнорируется.

Michael Stalcup 20.08.2019 17:01

@Roman Sterlin У меня та же ошибка, но я не могу использовать ваше решение, потому что оно находится в моем весеннем загрузочном приложении, где мне не нужно использовать web.xml. Тогда что я буду делать, чтобы решить эту проблему.

KJEjava48 23.08.2019 18:07

Эта ошибка, по-видимому, возникает после весеннего обновления проекта, очистка файла истории проекта в tomcat webapps может решить проблему.

Да, это сработало и для меня. особ. в процессе разработки каталог WEB-INF/lib развернутого веб-приложения не очищается только из-за повторного развертывания — вам нужно его очистить. Поэтому, если вы обновите Spring, вы можете временно получить несколько версий в каталоге lib.

Robert Watkins 18.10.2019 03:53

Я получаю эти ошибки при обновлении Spring 2.3.1 до любой более высокой версии. Также мне не помогла очистка папки webapp.

Michael Hegner 17.12.2020 13:00

Мне помогла очистка сервера. Просто сделайте следующее:

Щелкните правой кнопкой мыши на сервере -> Очистить.

Затем повторно разверните приложение на сервере.

Это сработало для меня в eclipse IDE, +1, спасибо.

user1821961 01.12.2020 20:37

Только этот ответ помог мне. Большое Вам спасибо!!

Carlos UCR 01.10.2021 01:55

Мой проект основан на версии 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.

rogerdpack 08.07.2020 17:15

Для меня это означало, что я включил несколько «затененных банок», в которых были упакованы копии весны. Так что все та же «весенняя версия», но несколько копий весны вызывают это.

Вы можете проверить, так ли это, перейдя на 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)

Этот метод помог мне легко определить

Manoj 08.01.2021 16:20

Мне пришлось добавить это в 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, проблема решена.

Спасибо, наконец-то что-то сработало для меня!

vishwampandya 22.12.2021 17:14

Была такая же проблема и хотел добраться до первопричины. Я знал, что фрагмент jar-файла spring-web называется «spring_web». Однако в моем исходном коде больше нигде не было фрагмента spring_web. Поэтому я использовал инструмент (jfind) для поиска «spring_web» в расширенной форме моего EAR, созданного во время сборки. Удивительно, но «spring_web» был обнаружен в банке веб-фрагментов другого проекта, который был создан во время сборки. При разрешении этого второго случая проблема исчезла. Похоже, это связано с дублированием фрагмента spring_web, и нам нужен только один.

Другие вопросы по теме