引子
本人之前基于 maven + jdk6 + tomcat6 创建了一套 SSM 基础项目,一直都正常使用。由于环境需要,改成了 maven + jdk8 + tomcat7 环境。当代码未被改动的时候,项目可以正常启动,而改动代码后,maven会自动编译,再启动的时候,就会报如下的错误信息:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/]] 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) ...
搜索问题原因
经过多番google搜索,终于找到错误原因,是由于其中一个加密相关的 jar - org.bouncycastle.bcpkix-jdk15on 不兼容导致(原文链接:https://stackoverflow.com/questions/17584495/unable-to-complete-the-scan-for-annotations-for-web-application-app-due-to-a)
解决方案
原配置
org.bouncycastle bcprov-jdk15on 1.52
改成
org.bouncycastle bcprov-jdk16 1.46