J'ai une application de démarrage à ressort qui fonctionne bien lorsque je l'exécute à l'aide du serveur intégré d'Intellj. Cependant, lorsque je le conditionne dans un fichier .war et le déploie sur tomcat, j'obtiens l'erreur suivante:
<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>
Mon projet ne contient pas plusieurs fragments Web, donc je ne sais pas ce qui pourrait causer ce problème.
pom.xml
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)
17 Réponses :
On dirait que vous avez deux versions différentes de Spring, vérifiez vos dépendances pour voir si vous avez une dépendance à une autre version de Spring.
mvn dependency:tree -Dverbose -Dincludes=groupId:artifactId
à quoi sert la dépendance mvn: tree -Dverbose -Dincludes = groupId: artifactId. Où dois-je utiliser cela?
Exécutez-le dans votre terminal à la racine du projet Maven pour localiser les dépendances en conflit. Documentation officielle Maven
Pour gradle, vous pouvez utiliser l'option dependencyInsight, plus disponible dans la documentation .
Comment utiliser l'option dependencyInsight dans Gradle, où dois-je la trouver? Ce lien ne fonctionne pas
Ce problème a été résolu en ajoutant un ordre absolu des descripteurs de déploiement.
La balise <absolute-ordering/>
été ajoutée au fichier web.xml
Référence:
https://www.oracle.com/technetwork/articles/javaee/javaee6overview-part2-136353.html
Vraiment ajouté à pom.xml
au lieu de web.xml
?
@Pardha Saradhi J'ai la même erreur, mais je ne peux pas utiliser votre solution bcos, c'est sur mon application Spring Boot où je n'ai pas besoin d'utiliser un web.xml.Ensuite, que vais-je faire pour résoudre ce problème.
@ KJEjava48 Je n'ai aucune idée de comment nous pouvons y parvenir au printemps. Je l'ai fait avec l'aide du processus suivi du lien ci-joint. Si vous trouvez une solution, postez-la. Ce sera utile aux autres.
J'ai eu le même problème et je l'ai résolu. Vous avez des erreurs similaires mais pas de démarrage à ressort utilisé. J'ai utilisé spring 3.x avec java 8. Si les solutions ci-dessus ne fonctionnent pas, changez les jars et recherchez si ces jars sont compatibles avec la version java que vous utilisez ou non. spring 3.x n'est pas compatible avec java 8.
ajoutez la <absolute-ordering />
à votre web.xml
juste sous la <display-name>
. devrait marcher.
Excellent! C'était un élément essentiel de la solution dont nous avions besoin et nous n'aurions pas pu le faire sans vous. J'ai publié notre solution complète sur stackoverflow.com/questions/57332888
J'utilise la configuration basée sur Java et je n'ai pas de fichiers xml, alors que dois-je faire ??
Pour tous ceux qui veulent plus d'informations, j'ai eu la même exception qui disait aussi "Voir la section 8.2.2 2c de la spécification Servlet pour plus de détails. Pensez à utiliser un ordre absolu." ... voici cette section: c. Exception de nom en double: si, lors de la traversée des fragments Web, plusieurs membres avec le même élément <name> sont rencontrés, l'application doit consigner un message d'erreur informatif contenant des informations pour aider à résoudre le problème et ne doit pas se déployer. Par exemple, une façon de résoudre ce problème consiste pour l'utilisateur à utiliser l'ordre absolu, auquel cas l'ordre relatif est ignoré.
@Roman Sterlin J'ai la même erreur, mais je ne peux pas utiliser votre solution bcos, c'est sur mon application Spring Boot où je n'ai pas besoin d'utiliser un web.xml.Ensuite, que vais-je faire pour résoudre ce problème.
Cette erreur semble se produire après la mise à jour du framework de printemps du projet, la suppression du fichier d'historique du projet dans les webapps
Tomcat peut résoudre le problème.
Ouais, cela a fonctionné pour moi aussi. Esp. en développement, le répertoire WEB-INF / lib de l'application web déployée n'est pas vidé uniquement à cause d'un redéploiement - vous devez le nettoyer. Donc, si vous mettez à niveau Spring, vous pouvez obtenir temporairement plusieurs versions dans le répertoire de la bibliothèque.
J'utilise la version Spring 5.1.8 et Apache Tomcat 8.5. Dans mon fichier web.xml
, j'ai ajouté l'ajout <absolute-ordering />
juste après la <display-name>
et cela a fonctionné pour moi.
ajouter une balise de classement absolute-ordering
à votre web.xml juste sous la balise de display-name
d' display-name
devrait fonctionner. - Cette réponse de Roman Sterlin a fonctionné pour moi aussi.
L'ajout de <commande absolue /> dans le fichier web.xml juste avant </web-app> a fonctionné pour moi. <servlet-mapping> <servlet-name> Votre nom de servlet </servlet-name> <url-pattern> / votre nom d'application / api / v1 / * </url-pattern> </servlet-mapping> <absolu-ordering > </absolute-ordering> </web-app>
J'utilise la configuration basée sur Java et je n'ai pas de fichiers xml, alors que dois-je faire ??
Le nettoyage du serveur a fonctionné pour moi. Faites ce qui suit:
Faites un clic droit sur le serveur -> Nettoyer.
Redéployez ensuite l'application sur le serveur.
Cela a fonctionné pour moi sur eclipse IDE, +1, merci.
Mon projet est basé sur la version Springboot (1.5.21.RELEASE) et génère une guerre et un déploiement en tomcat physique. J'avais eu le même problème et j'étais résolu avec l'approche ci-dessous.
Solution: excluez la dépendance tomcat-embed-websocket de spring-boot-starter-web dans le fichier 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>
Cette erreur vient généralement de cela si nous avons deux copies de spring dans notre conteneur, qui sont chargées par différents chargeurs de classe (dans mon cas, le chargeur de classe partagé et le chargeur de classe webapp).
Vérifiez le pom efficace, si vous avez des bocaux / classes de printemps incorporés dans un bundle, si c'est le cas, supprimez-le, vous devez utiliser celui installé en tant que bundle du conteneur.
J'ai résolu un problème similaire en supprimant toutes mes applications (j'avais là deux applications différentes) du dossier webapps, puis en redéployant mon fichier war.
J'ai eu le même problème lors de la construction d'un fichier de guerre avec maven car je n'avais pas nettoyé avant l'empaquetage et maven incluait plusieurs versions de fichiers jar de printemps des versions précédentes.
Juste une réponse des débutants aux débutants:
Assurez-vous de placer web.xml dans / WebContent / WEB-INF.
Je l'ai placé par inadvertance dans / WebContent (pas / WEB-INF), et je suis presque devenu fou en essayant d'appliquer sans succès certaines des solutions proposées, le message d'erreur était exactement le même.
Il devrait "finir" dans your_tomcat/webapps/your_webapp_name/WEB-INF/web.xml
FWIW
Pour moi, cela signifiait que j'incluais des "pots ombragés" qui regroupaient des copies de printemps en eux. Donc, tous les mêmes "version à ressort" mais plusieurs copies de ressort provoquent cela.
Vous pouvez vérifier si tel est le cas en accédant à tomcat/webapps/your_webapp/WEB-INF/lib
, en libérant tous les jars et en recherchant "spring_web"
ex:
# 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>
Si tel est le cas, vous devez utiliser le correctif absolu des autres réponses ou ne pas inclure plusieurs copies du printemps.
Il semble que ce soit un changement introduit dans tomcat 7.0.93 FWIW (il n'a donc pas provoqué cet échec dans les anciennes versions de tomcat 7)
J'ai dû ajouter ceci dans web.xml pour que cela fonctionne:
<absolute-ordering> <name>fragment_name_if_required</name> <others></others> </absolute-ordering>
Cela s'est produit après avoir mis à jour la version Spring Framework dans un projet Maven. J'ai finalement pu résoudre le problème en exécutant mvn clean
, apparemment les anciens JAR Spring étaient récupérés quelque part sous la cible.
Toutes ces réponses sont excellentes, mais vérifiez également si la lib "Apache CXF" est dans votre chemin de classe, elle est apparemment en conflit avec Spring Web 5.2.3, pour moi, j'ai temporairement supprimé parce que je ne l'utilise pas et maintenant mon projet fonctionne correctement.
Il semble que ce soit un changement introduit dans tomcat 7.0.93 FWIW ...
Si vous utilisez la configuration JAVA, trouvez votre réponse sur stackoverflow.com/questions/57626140/… .