我最近在将 Apache SOLR 4.1 战争文件部署到我们的 tomcat 6 服务器时遇到了问题。在服务器库 ($CATALINA_HOME/lib) 中,我们有一个旧的 lucene 实现库 (2.9+) 用于一些遗留搜索应用程序。SOLR 在其 .war 文件 WEB-INF/lib 中有较新的 4.1 lucene 实现 jar 文件。通过检查 Tomcat 6 文档,SOLR 库似乎应该首先加载;但是,根据经验,情况并非如此:如果我将其部署到正在运行的服务器,管理仪表板会显示它正在加载 2.9.0 lucene 实现。
添加另一个转折点:如果我停止并重新启动 Tomcat 服务器,则会切换到 4.1!正如你可能想象的那样,这让我对从属复制感到悲痛;因为我相信我的初始索引是通过 2.9 lucene 构建的,所以在某些时候重新启动了容器,使用当时加载的 4.1 进行了更新,并尝试复制到 2.9 lucene 实现的从属服务器,导致它们全部失败。
欢迎在这里提出任何建议。我尝试从 SOLR war 文件中删除 4.1 库,但它无法加载,因为某些依赖项似乎需要它们(尽管类加载器在部署后选择了“公共库”lucene 实现!)更新所有遗留文件是不可行的这些服务器上的软件到 lucene 4,因为会涉及到大量的重写。知道为什么类加载器会以这种方式执行吗?
编辑:更复杂的是,如果我在新启动的 Tomcat 上有 SOLR,显示 4.1.0 lucene 实现,然后重新加载核心或通过 Tomcat 管理器重新加载 webapp,它会回到 2.9.0!这显然是不可接受的。