由于 StackOverflowError,无法完成对 Web 应用程序 [/app] 注释的扫描

2022-08-31 16:04:58

我正在使用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安装”并重新启动服务器时,有时不会引发异常,并且应用程序工作正常。然而,大多数时候,它不起作用。

我想没有必要扫描弹跳城堡的依赖关系来进行注释。
我可以以某种方式禁用某些jar的此扫描吗?

我已经尝试添加到我的Web.xml并增加堆栈大小,但没有结果。metadata-complete="true"

我该怎么做才能解决这个问题?


答案 1

在我的例子中,导致循环依赖的类由类路径中的两个jar提供服务。org.bouncycastle.asn1.DEREncodableVector

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

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


答案 2

你有一个循环依赖关系。 取决于哪个取决于哪个... .这是一个无限的循环,所以你得到一个.org.bouncycastle.asn1.ASN1EncodableVectororg.bouncycastle.asn1.DEREncodableVectororg.bouncycastle.asn1.ASN1EncodableVectorStackOverflowException

如果您在 Eclipse 中安装了 Maven 插件,请查看依赖关系层次结构并查找这些类。我在这里找到了一个有类似问题的人,他通过查看依赖关系树,然后添加一个排除来打破循环依赖关系来解决它。


推荐