56

我正在使用 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 并增加堆栈大小但没有结果。

我能做些什么来解决这个问题?

4

12 回答 12

82

在我的情况下org.bouncycastle.asn1.DEREncodableVector,导致循环依赖的类由类路径中的两个 jar 提供。

bcprov-jdk15on-1.47.jarbcprov-jdk16-1.45.jar

排除了不需要的 jar(bcprov-jdk16-1.45.jar)并且效果很好

于 2013-10-16T06:28:51.263 回答
22

You have a cyclic dependency. org.bouncycastle.asn1.ASN1EncodableVector depends on org.bouncycastle.asn1.DEREncodableVector which depends back on org.bouncycastle.asn1.ASN1EncodableVector which ... . This is an infinite cycle and so you're getting a StackOverflowException.

If you have the Maven plugin installed in Eclipse, look at the Dependency Hierarchy and look for these classes. I found someone with a similar issue here, he solved it by looking at the dependency tree and then adding an exclusion to break the cyclic dependency.

于 2013-07-11T06:23:50.433 回答
8

我刚遇到这个问题。其他人已经给出了这个问题的答案。我想说点别的。

我猜你正在使用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,当存在两个或多个相同的类时,它会随机选择一个类。当它选择这种组合时,就会发生循环依赖。如果它选择其他组合,您的应用程序可能会正常工作。符合你描述的

然而,大多数时候,它不起作用。

这是一个概率事件。

于 2016-03-10T10:42:01.997 回答
4

这发生在我身上

        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk15on</artifactId>
        <version>1.54</version>

我将其升级为

        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk16</artifactId>
        <version>1.46</version>

这似乎已经解决了

于 2016-06-22T15:26:33.953 回答
2

我在 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)

我在我的应用程序库中找到了两个名为 bcprov-jdk*.jar 的 jar。我删除了所有这些并使用 bcprov-jdk15on-1.52.jar。这样,我的问题就解决了。

于 2018-04-04T12:24:04.923 回答
1

我有同样的问题并最终修复它。转到你的 pom 并搜索 bouncycastle 你应该看到不止一个排除其中一个,它应该修复它

于 2014-08-04T14:07:19.323 回答
1

我的 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>

这帮助我为我解决了这个问题。

于 2020-04-28T05:15:54.063 回答
0

我有同样的问题,我删除了 buildConfig 文件中的 bouncycastle 库的每一个痕迹。没有任何依赖或排除的痕迹。只需在 crypto.2.0 中添加插件,一切正常!

于 2014-05-29T09:16:21.187 回答
0

如果它已经在构建配置中排除并且错误仍然存​​在,您可以尝试在构建之前清理项目的工作目录。

maven clean

-

grails clean
于 2017-05-30T09:16:15.730 回答
0

我有同样的问题,但有不同的解决方案。我的冲突是 bcprov-jdk15on-1.55.jar 和 tika-app-1.7.jar。显然 tika 包括充气城堡,在这种情况下是导致冲突的旧版本的充气城堡。

于 2017-06-22T20:14:35.013 回答
0

还要仔细检查libTomcat 下的文件夹,以确保那里不存在重复的依赖项。

于 2015-08-17T07:26:40.793 回答
0

在 jenkins 工作区文件夹(我的项目运行的地方)中执行 mvn clean 并执行 Jenkins 构建(删除旧的战争文件)对我有用。

于 2019-05-31T13:24:13.680 回答