我正在运行一个带有 2 个不同的 webapp、1 个产品和 1 个沙箱的 tomcat 8 容器。所有的类/库和编译都是相同的,只是配置参数有一些细微的差别。我正在使用 lucene core 4.10.4(通过休眠搜索)。两个应用程序启动都很好,现在启动后,如果我在一个应用程序上使用搜索(比如说产品),一切正常。当我尝试在第二个应用程序上搜索时出现此错误
...引起: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$StaticImplementationAttributeFactory.createAttributeInstance(AttributeFactory.java:103) 在 org.apache 的 org.apache.lucene.util.AttributeFactory$1.createInstance(AttributeFactory.java:140) 的签名中使用。 lucene.util.AttributeSource.addAttribute(AttributeSource.java:
在第二个应用程序出错后,我仍然可以在第一个应用程序上进行搜索。似乎是当tomcat为我第二次访问搜索的应用程序加载所需的类时引起的。
我在 stackoverflow 和在线上找到的所有内容都谈到链接错误是由于 webapp 从不同的库加载相同的类或需要使用不同的 java 版本编译的类。但在这种情况下,这是 2 个不同的应用程序,这很奇怪,它们都可以正常工作,直到您在干净的 tomcat 启动后在第一个应用程序上使用它之后在第二个应用程序上使用搜索。我能找到的最接近的相关问题是一个名为清晰的项目。
我整晚都在用头撞墙,不知道它可能是什么,也不知道该往哪里看。