2 つの異なる webapps、1 つの prod および 1 つのサンドボックスを備えた tomcat 8 コンテナーを実行しています。すべてのクラス/ライブラリとコンパイルは同じですが、構成パラメーターにわずかな違いがあります。私は lucene コア 4.10.4 を使用しています (休止状態検索経由)。どちらのアプリも正常に起動します。起動後、1 つのアプリ (prod としましょう) で検索を使用すると、すべて正常に動作します。このエラーが発生した2番目のアプリを検索しようとすると、問題が発生します
... 原因: java.lang.LinkageError: ローダー制約違反: メソッド「java.lang.invoke.MethodHandle.invokeExact()Lorg/apache/lucene/util/AttributeImpl;」の解決時 現在のクラス org/apache/lucene/util/AttributeFactory$1 のクラス ローダー (org/apache/catalina/loader/WebappClassLoader のインスタンス)、および解決されたクラスのクラス ローダー (のインスタンス) java/lang/invoke/ MethodHandle には、タイプ andle.invokeExact()Lorg/apache/lucene/util/AttributeImpl に対して異なる Class オブジェクトがあります。org.apache.lucene.util.AttributeFactory$1.createInstance(AttributeFactory.java:140) at org.apache.lucene.util.AttributeFactory$StaticImplementationAttributeFactory.createAttributeInstance(AttributeFactory.java:103) at org.apache. lucene.util.AttributeSource.addAttribute(AttributeSource.java:
2 番目のアプリでエラーが発生した後でも、最初のアプリで問題なく検索できます。問題は、Tomcat が 2 番目に検索にアクセスしたアプリに必要なクラスをロードしたときに発生したようです。
私がstackoverflowとオンラインで見つけたものはすべて、Webアプリケーションが異なるライブラリから同じクラスをロードするか、異なるJavaバージョンでコンパイルされた必要なクラスが原因であるリンケージエラーについて話しています。しかし、この場合、奇妙なのは2つの異なるアプリであり、Tomcatのクリーンな起動後に最初のアプリで検索を使用した後、2番目のapで検索を使用するまで、両方とも機能します。私が見つけた最も関連性の高い問題は、clarency という名前のプロジェクトの this でした。
私は一晩中壁に頭をぶつけていて、それが何であるか、他にどこを見ればよいかわかりません.