找到了多个名为 [spring_web] 的片段。这对于相对顺序是不合法的
More than one fragment with the name [spring_web] was found. This is not legal with relative ordering
我有一个 spring 引导应用程序,当我 运行 它使用 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)
我的项目不包含多个网络片段,所以我不知道是什么导致了这个问题。
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>
听起来您有两个不同版本的 Spring,请检查您的依赖项以查看您是否依赖于另一个 Spring 版本。
mvn dependency:tree -Dverbose -Dincludes=groupId:artifactId
此问题已通过添加部署描述符的绝对排序解决。
标签 <absolute-ordering/>
已添加到 web.xml
参考:
https://www.oracle.com/technetwork/articles/javaee/javaee6overview-part2-136353.html
我遇到了同样的问题并解决了。得到类似的错误,但未使用 spring 启动。我已经使用 spring 3.x 和 java 8. 如果上述解决方案不起作用,请更改 jars 并搜索这些 jars 是否与您正在使用的 java 版本兼容. spring 3.x 不兼容 java 8.
将 <absolute-ordering />
标签添加到 web.xml
的 <display-name>
标签下方。
应该可以。
这个错误好像是在项目的spring框架更新后出现的,清除tomcat中的项目历史文件webapps
可能会解决问题。
清理服务器对我有用。只需执行以下操作:
右键单击服务器 -> 清理。
然后在服务器上重新部署应用程序。
我的项目是基于 Springboot 的版本 (1.5.21.RELEASE) 并生成 war 并在物理 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>
这个错误通常是因为如果我们的容器中有两个 spring 副本,它们由不同的 class 加载器加载(在我的例子中共享 class 加载器和 webapp class 装载机)。
检查有效的pom,如果你有任何bundle embed spring jars/classes,如果有删除它,你应该使用从容器安装的bundle。
我通过从 webapps 文件夹中删除我所有的应用程序(我有两个不同的应用程序)解决了类似的问题,然后重新部署我的 war 文件。
我在使用 maven 构建 war 文件时遇到了同样的问题,因为我在打包之前没有清理,而且 maven 包含了以前构建的 spring jar 文件的多个版本。
新手给新手的回答:
确保将 web.xml 放在 /WebContent/WEB-INF 内。
我无意中把它放在了 /WebContent(不是 /WEB-INF)中,几乎疯狂地试图应用一些建议的解决方案,但错误消息完全一样。
对我来说,这意味着我包括了一些“阴影罐”,其中捆绑了 spring 的副本。所以所有相同的“spring版本”但是spring的多个副本导致了这个。
您可以通过转至 tomcat/webapps/your_webapp/WEB-INF/lib
、解压缩所有 jar 并搜索“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>
我在更新 Maven 项目中的 Spring 框架版本后发生了这种情况。我终于能够通过 运行 mvn clean
解决问题,显然旧的 Spring JAR 正在目标下的某个地方被拾取。
所有这些答案都很好,但还要检查“Apache CXF”lib 是否在您的类路径中,它显然与 Spring Web 5.2.3 冲突,对我来说我暂时删除了因为我实际上没有使用它,现在我的项目 运行 没问题。
如果您手动添加所有 Jar,则必须删除 WEB-INF/lib/spring-web-5.2.9.RELEASE-sources.jar 或类似的 jar 文件(可能您的 jar 版本会有所不同)。一旦你删除那个 jar tomcat 就会开始工作。
对我来说,这个问题是在 Tomcat 没有正确安装时发生的。我已经重新安装并更新了安装路径:
eclipse window->preferences->runtime ENV -> path of the newly installed tomcat
设置正确的路径后,运行正常。
见行:
原因:java.lang.IllegalArgumentException:找到了多个名为 [spring_web] 的片段。这对于相对顺序是不合法的。有关详细信息,请参阅 Servlet 规范的第 8.2.2 节 2c。考虑使用绝对排序。
表示使用绝对排序。
因此,您必须在 web.xml
文件中的 <web-app>
标签内添加 <absolute-ordering/>
标签。
对我来说,这是因为 2 个 spring-web jar,即 spring-web-5.02-release.jar 和 spring-web-sources-5.02- release.jar 在构建路径中。通过删除 spring-web-sources-5.02-release.jar,问题得到解决。
遇到了同样的问题,想找出根本原因。我知道 spring-web jar 的片段叫做 'spring_web'。但是我的源代码在其他任何地方都没有 'spring_web' 片段。因此,我使用工具 (jfind) 通过在构建时生成的 EAR 的扩展形式搜索 'spring_web'。令人惊讶的是,'spring_web' 被发现在另一个项目的构建时生成的 web-fragment jar 中。在解决第二次出现时,问题就消失了。所以这似乎是由于 'spring_web' 片段重复,我们只需要一个片段。
您的 web.xml 应该如下所示(在标签 web-app 标签内添加 <absolute-ordering/>
)
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<absolute-ordering/>
</web-app>
我有一个 spring 引导应用程序,当我 运行 它使用 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)
我的项目不包含多个网络片段,所以我不知道是什么导致了这个问题。
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>
听起来您有两个不同版本的 Spring,请检查您的依赖项以查看您是否依赖于另一个 Spring 版本。
mvn dependency:tree -Dverbose -Dincludes=groupId:artifactId
此问题已通过添加部署描述符的绝对排序解决。
标签 <absolute-ordering/>
已添加到 web.xml
参考:
https://www.oracle.com/technetwork/articles/javaee/javaee6overview-part2-136353.html
我遇到了同样的问题并解决了。得到类似的错误,但未使用 spring 启动。我已经使用 spring 3.x 和 java 8. 如果上述解决方案不起作用,请更改 jars 并搜索这些 jars 是否与您正在使用的 java 版本兼容. spring 3.x 不兼容 java 8.
将 <absolute-ordering />
标签添加到 web.xml
的 <display-name>
标签下方。
应该可以。
这个错误好像是在项目的spring框架更新后出现的,清除tomcat中的项目历史文件webapps
可能会解决问题。
清理服务器对我有用。只需执行以下操作:
右键单击服务器 -> 清理。
然后在服务器上重新部署应用程序。
我的项目是基于 Springboot 的版本 (1.5.21.RELEASE) 并生成 war 并在物理 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>
这个错误通常是因为如果我们的容器中有两个 spring 副本,它们由不同的 class 加载器加载(在我的例子中共享 class 加载器和 webapp class 装载机)。
检查有效的pom,如果你有任何bundle embed spring jars/classes,如果有删除它,你应该使用从容器安装的bundle。
我通过从 webapps 文件夹中删除我所有的应用程序(我有两个不同的应用程序)解决了类似的问题,然后重新部署我的 war 文件。
我在使用 maven 构建 war 文件时遇到了同样的问题,因为我在打包之前没有清理,而且 maven 包含了以前构建的 spring jar 文件的多个版本。
新手给新手的回答:
确保将 web.xml 放在 /WebContent/WEB-INF 内。
我无意中把它放在了 /WebContent(不是 /WEB-INF)中,几乎疯狂地试图应用一些建议的解决方案,但错误消息完全一样。
对我来说,这意味着我包括了一些“阴影罐”,其中捆绑了 spring 的副本。所以所有相同的“spring版本”但是spring的多个副本导致了这个。
您可以通过转至 tomcat/webapps/your_webapp/WEB-INF/lib
、解压缩所有 jar 并搜索“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>
我在更新 Maven 项目中的 Spring 框架版本后发生了这种情况。我终于能够通过 运行 mvn clean
解决问题,显然旧的 Spring JAR 正在目标下的某个地方被拾取。
所有这些答案都很好,但还要检查“Apache CXF”lib 是否在您的类路径中,它显然与 Spring Web 5.2.3 冲突,对我来说我暂时删除了因为我实际上没有使用它,现在我的项目 运行 没问题。
如果您手动添加所有 Jar,则必须删除 WEB-INF/lib/spring-web-5.2.9.RELEASE-sources.jar 或类似的 jar 文件(可能您的 jar 版本会有所不同)。一旦你删除那个 jar tomcat 就会开始工作。
对我来说,这个问题是在 Tomcat 没有正确安装时发生的。我已经重新安装并更新了安装路径:
eclipse window->preferences->runtime ENV -> path of the newly installed tomcat
设置正确的路径后,运行正常。
见行:
原因:java.lang.IllegalArgumentException:找到了多个名为 [spring_web] 的片段。这对于相对顺序是不合法的。有关详细信息,请参阅 Servlet 规范的第 8.2.2 节 2c。考虑使用绝对排序。
表示使用绝对排序。
因此,您必须在 web.xml
文件中的 <web-app>
标签内添加 <absolute-ordering/>
标签。
对我来说,这是因为 2 个 spring-web jar,即 spring-web-5.02-release.jar 和 spring-web-sources-5.02- release.jar 在构建路径中。通过删除 spring-web-sources-5.02-release.jar,问题得到解决。
遇到了同样的问题,想找出根本原因。我知道 spring-web jar 的片段叫做 'spring_web'。但是我的源代码在其他任何地方都没有 'spring_web' 片段。因此,我使用工具 (jfind) 通过在构建时生成的 EAR 的扩展形式搜索 'spring_web'。令人惊讶的是,'spring_web' 被发现在另一个项目的构建时生成的 web-fragment jar 中。在解决第二次出现时,问题就消失了。所以这似乎是由于 'spring_web' 片段重复,我们只需要一个片段。
您的 web.xml 应该如下所示(在标签 web-app 标签内添加 <absolute-ordering/>
)
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<absolute-ordering/>
</web-app>