tomcat - 解決 org.bouncycastle.asn1.ASN1Boolean 非法循環依賴的錯誤


背景

記錄遇到一次奇怪的錯誤,在發布war包到Tomcat的時候,出現了org.bouncycastle.asn1.ASN1Boolean非法循環依賴的錯誤。

INFO: Deploying web application directory /data/w/www/xxx-app/webapps/ROOT
Apr 02, 2019 9:59:52 PM org.apache.catalina.core.ContainerBase addChildInternal
SEVERE: ContainerBase.addChild: start:
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)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1120)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1678)
    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 [] 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.ASN1Boolean->org.bouncycastle.asn1.DERBoolean->org.bouncycastle.asn1.ASN1Boolean]
    at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2188)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2135)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:2010)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1976)
    at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1961)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1319)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 10 more

現象

第一台機器很早之前部署的並且也部署成功,第二台機器通過scp命令將第一台機器的整個tomcat拷貝到第二台上並且啟動運行,tomcat拋出這個異常。

解決方案

  1. 進入tomcat WEB-INF下的LIB路徑中。
  2. 在該路徑下執行 find . -name * -exec grep -l "ASN1Boolean" {} ;
  3. 發現查詢出來的jar包有./fr-third-8.0.jar , ./bcprov-jdk-1.46.jar
  4. 在該項目中帆軟報表已經沒有使用了,不知道為何還會引入這個fr-third-8.0.jar這個包
  5. 排除該包fr-third-8.0.jar,並且重新啟動,啟動完成。

小結

對於為什么會出現循環依賴的這個問題,為什么會不確定性出現,按理說依賴沖突應該所有的機器都會出現這個錯誤,會什么會不定性出現?還在進一步調研中...有結論會在此博客更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM