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に追加しようとして、スタックサイズを増やしても結果は得られませんでした。
これを修正するにはどうすればよいですか?
私の場合、org.bouncycastle.asn1.DEREncodableVector
クラスは、循環依存関係を引き起こしていましたが、クラスパス内の2つのjarによって提供されていました。
bcprov-jdk15on-1.47.jar
およびbcprov-jdk16-1.45.jar
不要なjar(bcprov-jdk16-1.45.jar)を除外し、うまく機能しました
周期的な依存関係があります。 org.bouncycastle.asn1.ASN1EncodableVector
はorg.bouncycastle.asn1.DEREncodableVector
に依存します。これはorg.bouncycastle.asn1.ASN1EncodableVector
which ...に依存します。これは無限のサイクルであるため、StackOverflowException
を取得しています。
EclipseにMavenプラグインがインストールされている場合、Dependency Hierarchyを見て、これらのクラスを探します。同様の問題を持つ人を見つけました here 、彼は依存関係ツリーを見て、循環依存関係を壊すために除外を追加することでそれを解決しました。
この問題が発生しました。他の人はすでにこの問題への答えを与えています。私は別のことを言うでしょう。
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
を使用すると、2つ以上の同じクラスが存在する場合、クラスをランダムに選択します。そして、この組み合わせを選択すると、循環依存が発生します。他の組み合わせを選択した場合、アプリケーションは正常に動作する可能性があります。説明した内容と一致します
それでも、ほとんどの場合、機能しません。
それは確率的なイベントです。
これは私を使って起こっていました
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.54</version>
にアップグレードしました
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
そしてそれはそれを修正したようです
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を使用します。このようにして、私の問題は解決されました。
私は同じ問題を抱えていて、最終的にそれを修正しました。あなたのpomに行き、bouncycastleを検索してくださいあなたはそれらのうちの1つを除外する複数のものが表示されるはずであり、それを修正する必要があります
また、Tomcatの下のlib
フォルダーを再確認して、そこに重複した依存関係が存在しないことを確認します。
ビルド構成で既に除外されていて、エラーがまだ存在する場合は、ビルドする前にプロジェクトの作業ディレクトリを消去してみてください。
maven clean
-
grails clean
Jenkinsワークスペースフォルダ(私のプロジェクトが実行されている場所)でmvn cleanを実行し、Jenkinsビルド(古いwarファイルを削除する)を実行してくれました。
BuildConfigファイルからbouncycastleライブラリのすべてのトレースを削除するのと同じ問題がありました。依存関係または除外のトレースはありません。 crypto.2.0にプラグを追加するだけで、すべて正常に動作します!
私は同じ問題を抱えていましたが、解決策が異なりました。私の競合は、bcprov-jdk15on-1.55.jarおよびtika-app-1.7.jarとの競合でした。どうやらティカには弾力がある城が含まれており、この場合、紛争を引き起こす弾力がある城の古いバージョンが含まれています。