복붙노트

[SPRING] StackOverflowError로 인해 웹 응용 프로그램 [/ app]에 대한 특수 효과 검사를 완료 할 수 없습니다.

SPRING

StackOverflowError로 인해 웹 응용 프로그램 [/ app]에 대한 특수 효과 검사를 완료 할 수 없습니다.

STS (eclipse plugin)와 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"을 실행하고 서버를 다시 시작하면 때때로 예외가 throw되지 않고 응용 프로그램이 제대로 작동합니다. 그러나 대부분의 경우 작동하지 않습니다.

주석에 대한 bouncycastle 종속성을 검사 할 필요가 없다고 생각합니다. 일부 항아리에 대해이 스캐닝을 어떻게 든 비활성화 할 수 있습니까?

이미 web.xml에 metadata-complete = "true"를 추가하고 아무런 결과없이 스택 크기를 늘려 보았습니다.

이 문제를 해결하려면 어떻게해야합니까?

해결법

  1. ==============================

    1.내 경우에는 순환 종속성을 일으키는 org.bouncycastle.asn1.DEREncodableVector 클래스가 클래스 경로의 두 jar에 의해 제공되었습니다.

    내 경우에는 순환 종속성을 일으키는 org.bouncycastle.asn1.DEREncodableVector 클래스가 클래스 경로의 두 jar에 의해 제공되었습니다.

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

    원하지 않는 항아리 (bcprov-jdk16-1.45.jar)를 제외하고 제대로 작동했습니다.

  2. ==============================

    2.순환 종속성이 있습니다. org.bouncycastle.asn1.ASN1EncodableVector는 org.bouncycastle.asn1.EncodableVector에 의존하는 org.bouncycastle.asn1.DEREncodableVector에 의존합니다. 이것은 무한 사이클이므로 StackOverflowException이 발생합니다.

    순환 종속성이 있습니다. org.bouncycastle.asn1.ASN1EncodableVector는 org.bouncycastle.asn1.EncodableVector에 의존하는 org.bouncycastle.asn1.DEREncodableVector에 의존합니다. 이것은 무한 사이클이므로 StackOverflowException이 발생합니다.

    Eclipse에 Maven 플러그인이 설치되어 있다면 Dependency Hierarchy를보고 이러한 클래스를 찾으십시오. 비슷한 문제가있는 사람을 찾았습니다. 종속성 트리를보고 순환 적 종속성을 없애기 위해 제외 항목을 추가하여 해결했습니다.

  3. ==============================

    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을 사용하면 두 개 이상의 동일한 클래스가 존재할 때 클래스를 임의로 선택하게됩니다. 그리고이 조합을 선택하면 순환 종속성이 발생합니다. 다른 조합을 선택하면 응용 프로그램이 정상적으로 작동 할 수 있습니다. 당신이 묘사 한 것과 일치합니다.

    확률 론적 사건입니다.

  4. ==============================

    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. ==============================

    5.나는 똑같은 문제를 가지고 그것을 마침내 고쳤다. 퐁 (pom)에 가서 탄력을 찾으세요. 둘 이상을 제외하고 둘 중 하나만 제외하면 해결해야합니다.

    나는 똑같은 문제를 가지고 그것을 마침내 고쳤다. 퐁 (pom)에 가서 탄력을 찾으세요. 둘 이상을 제외하고 둘 중 하나만 제외하면 해결해야합니다.

  6. ==============================

    6.바람둥이 8과 jdk 1.8에서이 오류가 있습니다.

    바람둥이 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)
    

    그리고 내 응용 프로그램 lib에 bcprov-jdk * .jar라는 이름의 항아리가 두 개 발견되었습니다. 나는 그것들 모두를 제거하고 bcprov-jdk15on-1.52.jar를 사용합니다. 이런 식으로 내 문제가 해결되었습니다.

  7. ==============================

    7.나는 buildConfig 파일에서 bouncycastle 라이브러리의 모든 추적을 제거하는 것과 동일한 문제가있었습니다. 의존하거나 배제 된 흔적은 없습니다. crypto.2.0에 플러그를 추가하면 모든 것이 잘 작동합니다!

    나는 buildConfig 파일에서 bouncycastle 라이브러리의 모든 추적을 제거하는 것과 동일한 문제가있었습니다. 의존하거나 배제 된 흔적은 없습니다. crypto.2.0에 플러그를 추가하면 모든 것이 잘 작동합니다!

  8. ==============================

    8.또한 Tomcat에서 lib 폴더를 두 번 확인하여 중복 종속성이 존재하지 않는지 확인하십시오.

    또한 Tomcat에서 lib 폴더를 두 번 확인하여 중복 종속성이 존재하지 않는지 확인하십시오.

  9. ==============================

    9.빌드 구성에서 이미 제외되어 있고 오류가 여전히 존재하는 경우, 빌드하기 전에 프로젝트의 작업 디렉토리를 정리할 수 있습니다.

    빌드 구성에서 이미 제외되어 있고 오류가 여전히 존재하는 경우, 빌드하기 전에 프로젝트의 작업 디렉토리를 정리할 수 있습니다.

    maven clean
    

    -

    grails clean
    
  10. ==============================

    10.나는 같은 문제를 가지고 있지만 다른 해결책을 가지고 있었다. 내 충돌은 bcprov-jdk15on-1.55.jar 및 tika-app-1.7.jar에서 발생했습니다. 명백하게 tika는 탄력성이있는 성을 포함한다. 그리고이 경우에는 갈등을 일으키는 탄력있는 성의 더 오래되었던 버전이 포함된다.

    나는 같은 문제를 가지고 있지만 다른 해결책을 가지고 있었다. 내 충돌은 bcprov-jdk15on-1.55.jar 및 tika-app-1.7.jar에서 발생했습니다. 명백하게 tika는 탄력성이있는 성을 포함한다. 그리고이 경우에는 갈등을 일으키는 탄력있는 성의 더 오래되었던 버전이 포함된다.

  11. from https://stackoverflow.com/questions/17584495/unable-to-complete-the-scan-for-annotations-for-web-application-app-due-to-a by cc-by-sa and MIT license