Je développe une application Spring MVC utilisant STS (plugin Eclipse) et maven.
Pour créer le projet, j'ai suivi l'assistant STS pour un nouveau "projet Spring MVC". Par la suite, j'ai ajouté des dépendances à d'autres projets et bibliothèques.
Cependant, lorsque j'essaie maintenant de déployer le projet sur le serveur vFabric intégré de STS, j'obtiens parfois une exception:
SEVERE: ContainerBase.addChild: start:
org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/wsa]]
at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:154)
at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:901)
...
Caused by: Java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/app] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies. The class hierarchy being processed was [org.bouncycastle.asn1.ASN1EncodableVector->org.bouncycastle.asn1.DEREncodableVector->org.bouncycastle.asn1.ASN1EncodableVector]
at org.Apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.Java:2179)
...
Lors de l'émission d'un "nettoyage Maven", suivi d'une "installation Maven" et d'un redémarrage du serveur, l'exception n'est parfois pas levée et l'application fonctionne correctement. Pourtant, la plupart du temps, cela ne fonctionne pas.
Je suppose qu'il n'est pas nécessaire d'analyser les dépendances de bouncycastle pour les annotations.
Puis-je en quelque sorte désactiver cette analyse pour certains bocaux?
J'ai déjà essayé d'ajouter metadata-complete="true"
à mon web.xml et augmenter la taille de la pile sans résultat.
Que puis-je faire pour résoudre ce problème?
Dans mon cas, le org.bouncycastle.asn1.DEREncodableVector
class, qui était à l'origine de la dépendance cyclique, était desservie par deux bocaux dans le chemin de classe.
bcprov-jdk15on-1.47.jar
et bcprov-jdk16-1.45.jar
Exclus le pot indésirable (bcprov-jdk16-1.45.jar) et cela a bien fonctionné
Vous avez une dépendance cyclique. org.bouncycastle.asn1.ASN1EncodableVector
dépend de org.bouncycastle.asn1.DEREncodableVector
qui dépend de org.bouncycastle.asn1.ASN1EncodableVector
lequel ... . Il s'agit d'un cycle infini et vous obtenez donc un StackOverflowException
.
Si le plug-in Maven est installé dans Eclipse, regardez la hiérarchie des dépendances et recherchez ces classes. J'ai trouvé quelqu'un avec un problème similaire ici , il l'a résolu en regardant l'arbre de dépendance, puis en ajoutant une exclusion pour briser la dépendance cyclique.
Je viens de rencontrer ce problème. D'autres donnent déjà la réponse à ce problème. Je dirais autre chose.
Je suppose que vous utilisez maven-shade-plugin
ou quelque chose de similaire qui empaquette toutes les dépendances dans un pot Uber, non?
Vous pouvez voir dans grepcode
que bcprov-jdk15on:1.52
définit DEREncodableVector
comme
public class DEREncodableVector extends ASN1EncodableVector
Tandis que bcprov-jdk14:1.38
définit ASN1EncodableVector
as
public class ASN1EncodableVector extends DEREncodableVector
Et avec maven-shade-plugin
, il choisirait au hasard une classe lorsque deux ou plusieurs mêmes classes existent. Et quand il choisit cette combinaison, une dépendance cyclique se produit. S'il choisit d'autres combinaisons, votre application peut fonctionner correctement. Cela correspond à ce que vous avez décrit
Pourtant, la plupart du temps, cela ne fonctionne pas.
C'est un événement probabiliste.
Cela m'arrivait en utilisant
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.54</version>
J'ai mis cela à niveau
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
et cela semble l'avoir corrigé
J'ai cette erreur dans Tomcat 8 et jdk 1.8
04-Apr-2018 16:35:06.358 SEVERE [localhost-startStop-1] org.Apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/myapp]]
at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:167)
at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:752)
at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:728)
at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:734)
at org.Apache.catalina.startup.HostConfig.deployDirectory(HostConfig.Java:1141)
at org.Apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.Java:1875)
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:1142)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
at Java.lang.Thread.run(Thread.Java:745)
Caused by: Java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/myapp] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies. The class hierarchy being processed was [org.bouncycastle.asn1.ASN1EncodableVector->org.bouncycastle.asn1.DEREncodableVector->org.bouncycastle.asn1.ASN1EncodableVector]
at org.Apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.Java:2110)
at org.Apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.Java:2054)
at org.Apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.Java:2000)
at org.Apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.Java:1970)
at org.Apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.Java:1923)
at org.Apache.catalina.startup.ContextConfig.webConfig(ContextConfig.Java:1163)
at org.Apache.catalina.startup.ContextConfig.configureStart(ContextConfig.Java:775)
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:5105)
at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
... 10 more
04-Apr-2018 16:35:06.359 SEVERE [localhost-startStop-1] org.Apache.catalina.startup.HostConfig.deployDirectory Error deploying web application directory [/usr/Apache-Tomcat-8.5.24.Core/webapps/myapp]
Java.lang.IllegalStateException: ContainerBase.addChild: start: org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/myapp]]
at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:756)
at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:728)
at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:734)
at org.Apache.catalina.startup.HostConfig.deployDirectory(HostConfig.Java:1141)
at org.Apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.Java:1875)
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:1142)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
at Java.lang.Thread.run(Thread.Java:745)
Et j'ai trouvé deux pots avec le nom bcprov-jdk * .jar dans ma bibliothèque d'applications. J'ai supprimé tous ceux-ci et utilise bcprov-jdk15on-1.52.jar. De cette façon, mon problème a été résolu.
J'ai eu le même problème et l'ai résolu finalement. Accédez à votre pom et recherchez bouncycastle Vous devriez voir plus d'un exclure l'un d'entre eux et il devrait le réparer
Vérifiez également votre dossier lib
sous Tomcat pour vous assurer que la dépendance en double n'y est pas présente.
S'il est déjà exclu dans la configuration de construction et qu'une erreur existe toujours, vous pouvez essayer de nettoyer le répertoire de travail de votre projet avant de le construire.
maven clean
-
grails clean
Faire mvn clean dans le dossier de l'espace de travail jenkins (où mon projet s'exécute) et faire une build Jenkins (qui supprime l'ancien fichier war) a fonctionné pour moi.
J'ai eu le même problème que je supprime toutes les traces de la bibliothèque bouncycastle dans le fichier buildConfig. Aucune trace dans la dépendance ou exclut. Ajoutez simplement le plug-in dans crypto.2.0 et tout fonctionne bien!
J'ai eu le même problème mais avec une solution différente. Mon conflit était avec bcprov-jdk15on-1.55.jar et tika-app-1.7.jar. Apparemment, Tika comprend un château gonflable, et dans ce cas, l'ancienne version du château gonflable qui provoque le conflit.