web-dev-qa-db-ja.com

StackOverflowErrorのため、Webアプリケーション[/ app]の注釈のスキャンを完了できません

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 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の依存関係をスキャンして注釈を付ける必要はないと思います。
いくつかのjarファイルに対してこのスキャンを何らかの方法で無効にできますか?

すでにmetadata-complete="true"をweb.xmlに追加しようとして、スタックサイズを増やしても結果は得られませんでした。

これを修正するにはどうすればよいですか?

40
Matthias

私の場合、org.bouncycastle.asn1.DEREncodableVectorクラスは、循環依存関係を引き起こしていましたが、クラスパス内の2つのjarによって提供されていました。

bcprov-jdk15on-1.47.jarおよびbcprov-jdk16-1.45.jar

不要なjar(bcprov-jdk16-1.45.jar)を除外し、うまく機能しました

57
amindri

周期的な依存関係があります。 org.bouncycastle.asn1.ASN1EncodableVectororg.bouncycastle.asn1.DEREncodableVectorに依存します。これはorg.bouncycastle.asn1.ASN1EncodableVector which ...に依存します。これは無限のサイクルであるため、StackOverflowExceptionを取得しています。

EclipseにMavenプラグインがインストールされている場合、Dependency Hierarchyを見て、これらのクラスを探します。同様の問題を持つ人を見つけました here 、彼は依存関係ツリーを見て、循環依存関係を壊すために除外を追加することでそれを解決しました。

19
g00glen00b

この問題が発生しました。他の人はすでにこの問題への答えを与えています。私は別のことを言うでしょう。

maven-shade-pluginまたはすべての依存関係をUber jarにパッケージ化するようなものを使用していると思いますか?

grepcodeから、bcprov-jdk15on:1.52DEREncodableVectorを定義していることがわかります。

public class DEREncodableVector extends ASN1EncodableVector

bcprov-jdk14:1.38ASN1EncodableVectorを次のように定義します

public class ASN1EncodableVector extends DEREncodableVector

maven-shade-pluginを使用すると、2つ以上の同じクラスが存在する場合、クラスをランダムに選択します。そして、この組み合わせを選択すると、循環依存が発生します。他の組み合わせを選択した場合、アプリケーションは正常に動作する可能性があります。説明した内容と一致します

それでも、ほとんどの場合、機能しません。

それは確率的なイベントです。

4
user2473519

これは私を使って起こっていました

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

にアップグレードしました

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

そしてそれはそれを修正したようです

3
Victor Grazi

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)

そして、アプリのlibでbcprov-jdk * .jarという名前の2つのjarを見つけました。それらをすべて削除し、bcprov-jdk15on-1.52.jarを使用します。このようにして、私の問題は解決されました。

1
Ardeshir Ayati

私は同じ問題を抱えていて、最終的にそれを修正しました。あなたのpomに行き、bouncycastleを検索してくださいあなたはそれらのうちの1つを除外する複数のものが表示されるはずであり、それを修正する必要があります

1
yonia

また、Tomcatの下のlibフォルダーを再確認して、そこに重複した依存関係が存在しないことを確認します。

0
Thomas Raehalme

ビルド構成で既に除外されていて、エラーがまだ存在する場合は、ビルドする前にプロジェクトの作業ディレクトリを消去してみてください。

maven clean

-

grails clean
0
Tesla_PH

Jenkinsワークスペースフォルダ(私のプロジェクトが実行されている場所)でmvn cleanを実行し、Jenkinsビルド(古いwarファイルを削除する)を実行してくれました。

0
veritas

BuildConfigファイルからbouncycastleライブラリのすべてのトレースを削除するのと同じ問題がありました。依存関係または除外のトレースはありません。 crypto.2.0にプラグを追加するだけで、すべて正常に動作します!

0
NiBE

私は同じ問題を抱えていましたが、解決策が異なりました。私の競合は、bcprov-jdk15on-1.55.jarおよびtika-app-1.7.jarとの競合でした。どうやらティカには弾力がある城が含まれており、この場合、紛争を引き起こす弾力がある城の古いバージョンが含まれています。

0
Jason Kiefer