发现了多个名称为[spring_web]的片段。相对顺序不合法

时间:2019-01-21 12:43:53

标签: java spring-boot spring-mvc tomcat8

我有一个Spring Boot应用程序,当我使用来自Intellj的嵌入式服务器运行它时,它可以正常运行。但是,当我将其打包到.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)  

我的项目不包含多个Web片段,所以我不知道是什么导致了此问题。

pom.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>

19 个答案:

答案 0 :(得分:13)

import csv import re count = 0 count2 = 0 num1 = '1' num2 = '2' with open('numbers.csv') as csvfile: readCSV = csv.reader(csvfile, delimiter=',') for row in readCSV: print(row) for line in row: if line == num1: count += 1 elif line == num2: count2 += 1 print("Num1: "), count print("Num2: "), count2 标签下面,将<absolute-ordering />标签添加到您的web.xml中。 应该可以。

答案 1 :(得分:3)

听起来像您有两个不同的Spring版本,请检查您的依赖项,以查看您是否对另一个Spring版本具有依赖项。

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

答案 2 :(得分:3)

在使用maven构建war文件时,我遇到了同样的问题,因为在打包之前我没有清理,并且maven包含了先前构建的多个版本的spring jar文件。

答案 3 :(得分:2)

我在Maven项目中更新了Spring Framework版本后发生了这种情况。我终于可以通过运行mvn clean来解决此问题,显然旧的Spring JAR已在目标下方的某个地方被拾取。

答案 4 :(得分:2)

此错误通常是由于我们的容器中有两个spring副本,这些副本由不同的类加载器(在我的情况下是共享类加载器和webapp类加载器)加载。

检查有效的pom,如果您有任何捆绑包嵌入了弹簧罐/类,则将其删除,则应使用从容器中安装的捆绑包。

答案 5 :(得分:2)

清洁服务器对我有用。只需执行以下操作即可:

右键单击服务器->清理。

然后在服务器上重新部署应用程序。

答案 6 :(得分:1)

此问题通过添加部署描述符的绝对顺序解决。

标记<absolute-ordering/>已添加到pom.xml

参考:

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

答案 7 :(得分:1)

我必须在web.xml中添加它才能使其工作:

https://${COGNITO_OAUTH_DOMAIN}/signup?response_type=code&client_id=${CLIENT_ID}&redirect_uri=${encodeURIComponent(COGNITO_OAUTH_REDIRECT_SIGN_IN_URL)}

答案 8 :(得分:1)

我的项目是基于Springboot的版本(1.5.21.RELEASE),它会产生战争并部署在物理tomcat中。 我遇到了同样的问题,并通过以下方法解决了问题。

解决方案:从pom.xml中的spring-boot-starter-web排除tomcat-embed-websocket依赖

<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>

答案 9 :(得分:1)

该错误似乎是在项目的spring框架更新后发生的,清除tomcat webapps中的项目历史记录文件可以解决此问题。

答案 10 :(得分:0)

在您的 web.xml 中将一个absolute-ordering标记添加到display-name标记的下面即可。 -罗马·斯特林(Roman Sterlin)的回答也对我有用。

答案 11 :(得分:0)

我通过从webapps文件夹中删除所有应用程序(我有两个不同的应用程序)来解决了类似的问题,然后重新部署了我的war文件。

答案 12 :(得分:0)

我正在使用Spring 5.1.8和Tomcat 8.5版本。 在我的web.xml文件中,我在<absolute-ordering />标记后添加了<display-name>,这对我有用。

答案 13 :(得分:0)

从新手到新手的答案:

确保将web.xml放在/ WebContent / WEB-INF内。

我无意中将其放置在/ WebContent(而不是/ WEB-INF)中,并且尝试不成功地应用某些建议的解决方案几乎发疯了,错误消息是完全相同的。

答案 14 :(得分:0)

对我来说,这意味着我要包括一些“阴影罐”,这些罐将春天的副本捆扎在其中。因此,所有相同的“ spring版本”,但是spring的多个副本导致了这一点。

您可以通过以下方法检查是否存在这种情况:转到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中并未引发此故障)

答案 15 :(得分:0)

我遇到了同样的问题并解决了。出现类似错误,但未使用Spring Boot。我已将spring 3.x与Java 8一起使用。如果上述解决方案不起作用,请更改jar,并搜索这些jar是否与您使用的Java版本兼容。 spring 3.x与Java 8不兼容。

答案 16 :(得分:0)

所有这些答案都很好,但还要检查“ Apache CXF”库是否在您的类路径中,它显然与Spring Web 5.2.3冲突,对我来说,我暂时将其删除了,因为我实际上没有使用它,现在我的项目是运行正常。

答案 17 :(得分:0)

如果你手动添加了所有的 jar,那么你必须删除 WEB-INF/lib/spring-web-5.2.9.RELEASE-sources.jar 或类似的 jar 文件(可能是你的 jar版本会有所不同)。删除该 jar 后,tomcat 将开始工作。

答案 18 :(得分:0)

对我来说,这个问题发生在 Tomcat 没有正确安装时。我已经重新安装并更新了安装路径:

eclipse window->preferences->runtime ENV -> path of the newly installed tomcat 

设置正确的路径后,它工作正常。