56

STS (Eclipse プラグイン) と Maven を使用して Spring MVC アプリケーションを開発しています。

プロジェクトを作成するために、新しい「Spring MVC プロジェクト」の STS ウィザードに従いました。その後、他のプロジェクトやライブラリにいくつかの依存関係を追加しました。

ただし、プロジェクトを 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 に追加してスタックサイズを増やしてみましたが、結果はありませんでした。

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

4

12 に答える 12

82

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

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

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

于 2013-10-16T06:28:51.263 に答える
22

循環依存があります。org.bouncycastle.asn1.ASN1EncodableVector依存するorg.bouncycastle.asn1.DEREncodableVectorものは依存するorg.bouncycastle.asn1.ASN1EncodableVectorもの... . これは無限サイクルなので、StackOverflowException.

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

于 2013-07-11T06:23:50.433 に答える
8

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

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

次のように定義されgrepcodeていることからわかりますbcprov-jdk15on:1.52DEREncodableVector

public class DEREncodableVector extends ASN1EncodableVector

bcprov-jdk14:1.38として定義ASN1EncodableVectorしながら

public class ASN1EncodableVector extends DEREncodableVector

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

しかし、ほとんどの場合、うまくいきません。

確率的な出来事です。

于 2016-03-10T10:42:01.997 に答える
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>

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

于 2016-06-22T15:26:33.953 に答える
1

私は同じ問題を抱えていて、最終的に修正しました。あなたのpomに行き、bouncycastleを検索してください

于 2014-08-04T14:07:19.323 に答える
0

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

于 2015-08-17T07:26:40.793 に答える