我有一个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>
答案 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)
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
设置正确的路径后,它工作正常。