我正在使用STS(eclipse插件)和maven开发一个Spring MVC应用程序。
为了创建项目,我按照STS向导进行了一个新的“Spring MVC项目”。之后,我向其他项目和库添加了一些依赖项。
但是,当我现在尝试将项目部署到STS的集成vFabric服务器时,我有时会遇到异常:
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)
...
当发出“maven clean”,然后是“maven install”并重新启动服务器时,异常有时不会被抛出并且应用程序正常工作。然而,大多数时候,它都不起作用。
我想没有必要扫描注释的bouncycastle依赖项 我可以以某种方式禁用某些罐子的扫描吗?
我已经尝试将metadata-complete="true"
添加到我的web.xml并增加堆栈大小而没有结果。
我该怎么做才能解决这个问题?
答案 0 :(得分:55)
在我的情况下,导致循环依赖的org.bouncycastle.asn1.DEREncodableVector
类由类路径中的两个jar提供。
bcprov-jdk15on-1.47.jar
和bcprov-jdk16-1.45.jar
排除了不需要的jar(bcprov-jdk16-1.45.jar)并且运行良好
答案 1 :(得分:19)
你有一个循环依赖。 org.bouncycastle.asn1.ASN1EncodableVector
取决于org.bouncycastle.asn1.DEREncodableVector
,org.bouncycastle.asn1.ASN1EncodableVector
取决于StackOverflowException
....这是一个无限循环,所以你得到一个{{1}}。
如果您在Eclipse中安装了Maven插件,请查看依赖关系层次结构并查找这些类。我找到了一个有类似问题here的人,他通过查看依赖树然后添加排除来解决循环依赖关系来解决它。
答案 2 :(得分:4)
我刚遇到这个问题。其他人已经给出了这个问题的答案。我会说别的。
我猜你正在使用maven-shade-plugin
或类似的东西把所有依赖包装成Uber jar,对吗?
您可以从grepcode
bcprov-jdk15on:1.52
将DEREncodableVector
定义为
public class DEREncodableVector extends ASN1EncodableVector
bcprov-jdk14:1.38
将ASN1EncodableVector
定义为
public class ASN1EncodableVector extends DEREncodableVector
使用maven-shade-plugin
时,如果存在两个或多个相同的类,它会随机选择一个类。当它选择这种组合时,会发生循环依赖。如果它选择其他组合,您的应用程序可能会正常工作。
它符合你描述的内容
然而,大多数时候,它都不起作用。
这是一个概率事件。
答案 3 :(得分:3)
这是发生在我身上的
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.54</version>
我将其升级为
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
似乎已经解决了这个问题
答案 4 :(得分:1)
我遇到了同样的问题并最终修复了它。 去你的pom并搜索bouncycastle 您应该看到多个排除其中一个并且应该修复它
答案 5 :(得分:1)
我在tomcat 8和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)
我在app lib中找到了两个名为bcprov-jdk * .jar的jar。 我删除了所有这些并使用bcprov-jdk15on-1.52.jar。 这样,我的问题就解决了。
答案 6 :(得分:0)
我遇到了同样的问题,我删除了buildConfig文件中每个bouncycastle库的痕迹。没有任何依赖或排除痕迹。只需在crypto.2.0中添加插件,一切正常!
答案 7 :(得分:0)
同时仔细检查Tomcat下的lib
文件夹,以确保不存在重复的依赖项。
答案 8 :(得分:0)
如果已在构建配置中排除它并且错误仍然存在, 您可以在构建之前尝试清理项目的工作目录。
maven clean
-
grails clean
答案 9 :(得分:0)
我有同样的问题,但有不同的解决方案。我与bcprov-jdk15on-1.55.jar和tika-app-1.7.jar发生冲突。显然tika包括充气城堡,在这种情况下,旧版本的充气城堡导致冲突。
答案 10 :(得分:0)
在jenkins工作区文件夹(我的项目运行所在的位置)中执行mvn clean并进行Jenkins构建(删除旧的war文件)对我来说很有效。
答案 11 :(得分:0)
我的Spring Boot项目中也遇到了同样的问题。为了找出冲突的依赖关系,我从项目目录中发出以下命令:
mvn dependency:tree -Dverbose -Dincludes=org.bouncycastle
从输出中发现以下信息:
[INFO] +- org.springframework.cloud:spring-cloud-starter-openfeign:jar:2.1.0.RC3:compile
[INFO] | \- org.springframework.cloud:spring-cloud-starter:jar:2.1.0.RC2:compile
[INFO] | \- org.springframework.security:spring-security-rsa:jar:1.0.7.RELEASE:compile
[INFO] | \- org.bouncycastle:bcpkix-jdk15on:jar:1.60:compile
[INFO] | \- org.bouncycastle:bcprov-jdk15on:jar:1.60:compile
[INFO] \- com.cybersource:cybersource-rest-client-java:jar:0.0.16:compile
[INFO] \- com.cybersource:AuthenticationSdk:jar:0.0.8:compile
[INFO] \- org.bouncycastle:bcprov-jdk16:jar:1.45:compile
在这里我们可以看到openfeign和cybersource-rest-client使用的是bcprov-jdk软件包的不同版本。由于cybersource-rest-client具有此软件包的更新版本,因此我在pom.xml中的openfeign中排除了这种依赖性,如下所示:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<exclusions>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</exclusion>
</exclusions>
</dependency>
这帮助我为我解决了这个问题。