由于 ***Error,无法完成对 Web 应用程序 [/app] 注释的扫描
Posted
技术标签:
【中文标题】由于 ***Error,无法完成对 Web 应用程序 [/app] 注释的扫描【英文标题】:Unable to complete the scan for annotations for web application [/app] due to a ***Error 【发布时间】:2013-07-09 04:48:52 【问题描述】:我正在使用 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 ***Error. 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 并增加堆栈大小但没有结果。
我能做些什么来解决这个问题?
【问题讨论】:
可能的根本原因包括 -Xss 设置太低和非法循环继承依赖项。 我猜该消息已经回答了你。 如前所述:我已经增加了堆栈大小。而且我不能改变一些外部依赖的继承。我只是需要一些方法将它们排除在扫描之外。 你在哪里提高了堆栈大小? 在“Arguments - VM arguments”下我的服务器项目的“运行配置”设置中,我设置了“-Xss4m”(之前是Xss768k左右)。 【参考方案1】:在我的例子中,导致循环依赖的 org.bouncycastle.asn1.DEREncodableVector
类由类路径中的两个 jar 提供。
bcprov-jdk15on-1.47.jar
和 bcprov-jdk16-1.45.jar
排除了不需要的jar(bcprov-jdk16-1.45.jar),效果很好
【讨论】:
就我而言,只有 bcprov-jdk15on-1.47.jar 已解决问题 我在使用 tomcat 9 时遇到了这个问题,并且仅在调试模式下。当tomcat以运行模式启动时,它工作正常。这里建议的修复方法也对我有用。 非常有帮助,@amindri,这是救命稻草!【参考方案2】:你有一个循环依赖。 org.bouncycastle.asn1.ASN1EncodableVector
依赖于 org.bouncycastle.asn1.DEREncodableVector
,后者又依赖于 org.bouncycastle.asn1.ASN1EncodableVector
,其中 ... 。这是一个无限循环,所以你会得到一个***Exception
。
如果您在 Eclipse 中安装了 Maven 插件,请查看 Dependency Hierarchy 并查找这些类。我发现有人有类似的问题here,他通过查看依赖树然后添加排除以打破循环依赖来解决它。
【讨论】:
感谢您的回复。这些库的依赖树看起来很正常(我无法识别任何循环依赖):\- org.apache.activemq:activemq-all:jar:5.8.0:compile \- org.apache.activemq:activemq-amqp:jar:5.8.0:compile \- org.apache.qpid:proton-jms:jar:0.3.0-fuse-2:compile \- org.apache.qpid:proton:jar:0.3.0-fuse-2:compile \- org.bouncycastle:bcpkix-jdk15on:jar:1.47:compile \- org.bouncycastle:bcprov-jdk15on:jar:1.47:compile
我应该尝试使用 pom 从 maven 中排除库吗?还是仅来自部署?
我看到你有两个 org.bouncycastle*
依赖项。你能检查其中一个是否依赖于另一个吗?尝试删除其中一个,看看您的代码是否仍然有效。如果其中一个依赖于另一个,它可能会自行下载另一个。
问题是这些只是间接依赖,即它们是我无法更改的必需项目所必需的。因此,我将组“org.bouncycastle”/工件“bcprov-jdk16”添加到我的 pom 文件中此依赖项的“排除”列表中。然而,仍然没有运气。【参考方案3】:
我刚遇到这个问题。其他人已经给出了这个问题的答案。我想说点别的。
我猜你正在使用 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
,当存在两个或多个相同的类时,它会随机选择一个类。当它选择这种组合时,就会发生循环依赖。如果它选择其他组合,您的应用程序可能会正常工作。
符合你的描述
然而,大多数时候,它不起作用。
这是一个概率事件。
【讨论】:
请注意,这种情况也可能出现在pdfbox-app
捆绑了它自己的 Bouncy Castle 版本。
还有selenium-server-standalone
有自己的ASN1EncodableVectore.class
【参考方案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>
这似乎已经解决了它
【讨论】:
【参考方案5】:我在 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 ***Error. 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。 这样,我的问题就解决了。
【讨论】:
【参考方案6】:我遇到了同样的问题,最后解决了。 转到您的 pom 并搜索 bouncycastle 你应该看到不止一个排除其中一个,它应该修复它
【讨论】:
【参考方案7】:我的 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>
这帮助我为我解决了这个问题。
【讨论】:
【参考方案8】:我遇到了同样的问题,我在 buildConfig 文件中删除了 bouncycastle 库的所有痕迹。没有任何依赖或排除的痕迹。只需在 crypto.2.0 中添加插件,一切正常!
【讨论】:
【参考方案9】:还要仔细检查 Tomcat 下的 lib
文件夹,确保那里不存在重复的依赖项。
【讨论】:
【参考方案10】:如果它已经在构建配置中排除并且错误仍然存在, 您可以在构建之前尝试清理项目的工作目录。
maven clean
-
grails clean
【讨论】:
【参考方案11】:我遇到了同样的问题,但有不同的解决方案。我的冲突是 bcprov-jdk15on-1.55.jar 和 tika-app-1.7.jar。显然 tika 包括充气城堡,在这种情况下是导致冲突的旧版本的充气城堡。
【讨论】:
【参考方案12】:在 jenkins 工作区文件夹(我的项目运行的地方)中执行 mvn clean 并执行 Jenkins 构建(删除旧的 war 文件)对我有用。
【讨论】:
以上是关于由于 ***Error,无法完成对 Web 应用程序 [/app] 注释的扫描的主要内容,如果未能解决你的问题,请参考以下文章
docker ERROR:对于 nginx 无法启动服务 nginx:驱动程序在编程外部连接时失败
'var_name'未声明。由于其保护级别,它可能无法访问。在调试模式下
IDEA 之 ERROR:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]