Подтвердить что ты не робот

Не удалось выполнить проверку аннотаций для веб-приложения [/app] из-за StackOverflowError

Я разрабатываю приложение Spring MVC с использованием STS (плагин eclipse) и maven.

Для создания проекта я последовал за мастером STS для нового проекта Spring MVC ". Впоследствии я добавил некоторые зависимости к другим проектам и библиотекам.

Однако, когда я сейчас пытаюсь развернуть проект на интегрированный сервер VFabric STS, иногда я получаю исключение:

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" и перезапуск сервера, исключение иногда не бросается, и приложение работает нормально. Тем не менее, в большинстве случаев это не работает.

Я думаю, нет необходимости сканировать зависимости bouncycastle для аннотаций.
Могу ли я каким-то образом отключить это сканирование для некоторых банок?

Я уже попробовал добавить metadata-complete="true" в свой web.xml и увеличить размер стека без результата.

Что я могу сделать, чтобы исправить это?

4b9b3361

Ответ 1

В моем случае класс org.bouncycastle.asn1.DEREncodableVector, который вызывал циклическую зависимость, обслуживался двумя банками в пути к классу.

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

Исключил нежелательную банку (bcprov-jdk16-1.45.jar), и она хорошо работала

Ответ 2

Я переключился на Tomcat для целей разработки - до сих пор он отлично работает без каких-либо изменений.

Ответ 3

У вас есть циклическая зависимость. org.bouncycastle.asn1.ASN1EncodableVector зависит от org.bouncycastle.asn1.DEREncodableVector, который зависит от org.bouncycastle.asn1.ASN1EncodableVector, который.... Это бесконечный цикл, поэтому вы получаете StackOverflowException.

Если у вас есть плагин Maven, установленный в Eclipse, посмотрите на Иерархия зависимостей и найдите эти классы. Я нашел кого-то с аналогичной проблемой здесь, он решил его, посмотрев на дерево зависимостей, а затем добавив исключение, чтобы разбить циклическую зависимость.

Ответ 4

Я просто столкнулся с этой проблемой. Другие уже дают ответ на эту проблему. Я бы сказал что-то еще.

Я предполагаю, что вы используете maven-shade-plugin или что-то подобное, которое упаковывает все зависимости в банку Uber, правильно?

Из grepcode видно, что bcprov-jdk15on:1.52 определяет DEREncodableVector как

public class DEREncodableVector extends ASN1EncodableVector

Пока bcprov-jdk14:1.38 определяет ASN1EncodableVector как

public class ASN1EncodableVector extends DEREncodableVector

И с maven-shade-plugin он будет произвольно выбирать класс, когда существуют два или более одинаковых класса. И когда он выбирает эту комбинацию, циклическая зависимость происходит. Если вы выберете другие комбинации, ваше приложение может работать нормально. Он соответствует тому, что вы описали

Тем не менее, в большинстве случаев это не работает.

Это вероятностное событие.

Ответ 5

Это происходило со мной, используя

        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk15on</artifactId>
        <version>1.54</version>

Я обновил это до

        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk16</artifactId>
        <version>1.46</version>

и, похоже, исправил его

Ответ 6

У меня была такая же проблема и, наконец, она была исправлена. Пойдите к своему pom и ищите bouncycastle Вы должны увидеть, что более одного исключает один из них, и он должен исправить его.

Ответ 7

У меня есть эта ошибка в 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 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)

И я нашел два баночки с именем bcprov-jdk *.jar в своем приложении lib. Я удалил все из них и использовал bcprov-jdk15on-1.52.jar. Таким образом, моя проблема была решена.

Ответ 8

У меня была такая же проблема, я удаляю каждую трассировку библиотеки bouncycastle в файле buildConfig. Никакой след в dependecy или исключает. Просто добавьте плагин crypto.2.0, и все будет хорошо!

Ответ 9

Также дважды проверьте папку lib под Tomcat, чтобы убедиться, что дублирующая зависимость там отсутствует.

Ответ 10

Если он уже исключен в конфигурации сборки, и ошибка все еще существует, вы можете попытаться очистить рабочий каталог проекта до его сборки.

maven clean

-

grails clean

Ответ 11

У меня была такая же проблема, но с другим решением. Мой конфликт был с bcprov-jdk15on-1.55.jar и tika-app-1.7.jar. По-видимому, тика включает в себя бодрящий замок, и в этом случае более старую версию ботинкового замка, которая вызывает конфликт.

Ответ 12

Выполнение mvn clean в папке рабочей области jenkins (там, где работает мой проект) и сборка Jenkins (которая удаляет старый файл war) помогли мне.