【问题标题】:Solr Exception when trying to integrate with liferay尝试与 liferay 集成时出现 Solr 异常
【发布时间】:2013-12-03 13:01:25
【问题描述】:

我尝试使用 tomcat 7 在窗口 7 上添加 apache solr 4.6。

我还将 solr、solrj 和 log4j 添加到 tomcat lib 文件夹中。 我将 solr web porlet 复制到 liferay 并尝试启动服务器,但出现异常。

谁能告诉我这个错误是关于什么的。

15:01:24,325 信息 [localhost-startStop-1][HotDeployImpl:185] 从队列部署 solr-web 15:01:24,326 INFO [localhost-startStop-1][PluginPackageUtil:1049] 读取插件包 对于 solr-web 15:01:24,610 错误 [localhost-startStop-1][ContextLoader:227] 上下文初始化 org.springframework.beans.factory.BeanCreationException 失败:错误 用名字创建bean 'com.liferay.portal.search.solr.server.BasicAuthSolrServer' 定义在 ServletContext 资源 [/WEB-INF/classes/META-INF/solr-spring.xml]: bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:不能 实例化 bean 类 [com.liferay.portal.search.solr.server.BasicAuthSolrServer]: 构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: org/apache/solr/client/solrj/impl/CommonsHttpSolrServer 在 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:288) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1002) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:906) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:484) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:455) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 在 org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 在 com.liferay.portal.spring.context.PortletContextLoaderListener.contextInitialized(PortletContextLoaderListener.java:85) 在 com.liferay.portal.deploy.hot.SpringHotDeployListener.doInvokeDeploy(SpringHotDeployListener.java:79) 在 com.liferay.portal.deploy.hot.SpringHotDeployListener.invokeDeploy(SpringHotDeployListener.java:41) 在 com.liferay.portal.deploy.hot.HotDeployImpl.doFireDeployEvent(HotDeployImpl.java:195) 在 com.liferay.portal.deploy.hot.HotDeployImpl.fireDeployEvent(HotDeployImpl.java:97) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:616) 在 com.liferay.portal.security.lang.DoPrivilegedHandler.doInvoke(DoPrivilegedHandler.java:88) 在 com.liferay.portal.security.lang.DoPrivilegedHandler.invoke(DoPrivilegedHandler.java:56) 在 $Proxy29.fireDeployEvent(Unknown Source) 在 com.liferay.portal.kernel.deploy.hot.HotDeployUtil.fireDeployEvent(HotDeployUtil.java:27) 在 com.liferay.portal.kernel.servlet.PluginContextListener.fireDeployEvent(PluginContextListener.java:164) 在 com.liferay.portal.kernel.servlet.PluginContextListener.doPortalInit(PluginContextListener.java:154) 在 com.liferay.portal.kernel.util.BasePortalLifecycle.portalInit(BasePortalLifecycle.java:44) 在 com.liferay.portal.kernel.util.PortalLifecycleUtil.register(PortalLifecycleUtil.java:64) 在 com.liferay.portal.kernel.util.PortalLifecycleUtil.register(PortalLifecycleUtil.java:56) 在 com.liferay.portal.kernel.util.BasePortalLifecycle.registerPortalLifecycle(BasePortalLifecycle.java:54) 在 com.liferay.portal.kernel.servlet.PluginContextListener.contextInitialized(PluginContextListener.java:116) 在 com.liferay.portal.kernel.servlet.SecurePluginContextListener.contextInitialized(SecurePluginContextListener.java:151) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 在 org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1114) 在 org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1672) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 在 java.util.concurrent.FutureTask.run(FutureTask.java:166) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 在 java.lang.Thread.run(Thread.java:679) 引起: org.springframework.beans.BeanInstantiationException:不能 实例化 bean 类 [com.liferay.portal.search.solr.server.BasicAuthSolrServer]: 构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: org/apache/solr/client/solrj/impl/CommonsHttpSolrServer 在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141) 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:108) 在 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280) ... 49 更多原因:java.lang.NoClassDefFoundError: org/apache/solr/client/solrj/impl/CommonsHttpSolrServer 在 com.liferay.portal.search.solr.server.BasicAuthSolrServer.(BasicAuthSolrServer.java:71) 在 com.liferay.portal.search.solr.server.BasicAuthSolrServer.(BasicAuthSolrServer.java:81) 在 com.liferay.portal.search.solr.server.BasicAuthSolrServer.(BasicAuthSolrServer.java:75) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:532) 在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126) ... 51 更多原因:java.lang.ClassNotFoundException: org.apache.solr.client.solrj.impl.CommonsHttpSolrServer 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) ... 59 更多 15:01:24,623 错误 [localhost-startStop-1][HotDeployImpl:198] com.liferay.portal.kernel.deploy.hot.HotDeployException:错误 为 solr-web 初始化 Spring com.liferay.portal.kernel.deploy.hot.HotDeployException:错误 为 solr-web 初始化 Spring com.liferay.portal.kernel.deploy.hot.BaseHotDeployListener.throwHotDeployException(BaseHotDeployListener.java:46) 在 com.liferay.portal.deploy.hot.SpringHotDeployListener.invokeDeploy(SpringHotDeployListener.java:44) 在 com.liferay.portal.deploy.hot.HotDeployImpl.doFireDeployEvent(HotDeployImpl.java:195) 在 com.liferay.portal.deploy.hot.HotDeployImpl.fireDeployEvent(HotDeployImpl.java:97) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:616) 在 com.liferay.portal.security.lang.DoPrivilegedHandler.doInvoke(DoPrivilegedHandler.java:88) 在 com.liferay.portal.security.lang.DoPrivilegedHandler.invoke(DoPrivilegedHandler.java:56) 在 $Proxy29.fireDeployEvent(Unknown Source) 在 com.liferay.portal.kernel.deploy.hot.HotDeployUtil.fireDeployEvent(HotDeployUtil.java:27) 在 com.liferay.portal.kernel.servlet.PluginContextListener.fireDeployEvent(PluginContextListener.java:164) 在 com.liferay.portal.kernel.servlet.PluginContextListener.doPortalInit(PluginContextListener.java:154) 在 com.liferay.portal.kernel.util.BasePortalLifecycle.portalInit(BasePortalLifecycle.java:44) 在 com.liferay.portal.kernel.util.PortalLifecycleUtil.register(PortalLifecycleUtil.java:64) 在 com.liferay.portal.kernel.util.PortalLifecycleUtil.register(PortalLifecycleUtil.java:56) 在 com.liferay.portal.kernel.util.BasePortalLifecycle.registerPortalLifecycle(BasePortalLifecycle.java:54) 在 com.liferay.portal.kernel.servlet.PluginContextListener.contextInitialized(PluginContextListener.java:116) 在 com.liferay.portal.kernel.servlet.SecurePluginContextListener.contextInitialized(SecurePluginContextListener.java:151) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 在 org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1114) 在 org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1672) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 在 java.util.concurrent.FutureTask.run(FutureTask.java:166) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 在 java.lang.Thread.run(Thread.java:679) 引起: org.springframework.beans.factory.BeanCreationException:错误 用名字创建bean 'com.liferay.portal.search.solr.server.BasicAuthSolrServer' 定义在 ServletContext 资源 [/WEB-INF/classes/META-INF/solr-spring.xml]: bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:不能 实例化 bean 类 [com.liferay.portal.search.solr.server.BasicAuthSolrServer]: 构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: org/apache/solr/client/solrj/impl/CommonsHttpSolrServer 在 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:288) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1002) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:906) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:484) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:455) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 在 org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 在 com.liferay.portal.spring.context.PortletContextLoaderListener.contextInitialized(PortletContextLoaderListener.java:85) 在 com.liferay.portal.deploy.hot.SpringHotDeployListener.doInvokeDeploy(SpringHotDeployListener.java:79) 在 com.liferay.portal.deploy.hot.SpringHotDeployListener.invokeDeploy(SpringHotDeployListener.java:41) ... 32 更多原因: org.springframework.beans.BeanInstantiationException:不能 实例化 bean 类 [com.liferay.portal.search.solr.server.BasicAuthSolrServer]: 构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: org/apache/solr/client/solrj/impl/CommonsHttpSolrServer 在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141) 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:108) 在 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280) ... 49 更多原因:java.lang.NoClassDefFoundError: org/apache/solr/client/solrj/impl/CommonsHttpSolrServer 在 com.liferay.portal.search.solr.server.BasicAuthSolrServer.(BasicAuthSolrServer.java:71) 在 com.liferay.portal.search.solr.server.BasicAuthSolrServer.(BasicAuthSolrServer.java:81) 在 com.liferay.portal.search.solr.server.BasicAuthSolrServer.(BasicAuthSolrServer.java:75) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:532) 在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126) ... 51 更多原因:java.lang.ClassNotFoundException: org.apache.solr.client.solrj.impl.CommonsHttpSolrServer 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)

【问题讨论】:

    标签: solr tomcat7 liferay-6


    【解决方案1】:

    liferay 6.1.x 的 solr-web 插件与 solr 4.6 不兼容,它与 solr 1.4 兼容。

    如果你想使用 solr 4.6,你必须修改 solr-web。有关此问题的其他问题,请参阅answer

    【讨论】:

      【解决方案2】:
      java.lang.ClassNotFoundException: 
      org.apache.solr.client.solrj.impl.CommonsHttpSolrServer at 
      org.apache.catalina.loader.WebappClassLoader.loadClass...
      

      此错误告诉您找不到类 ̀org.apache.solr.client.solrj.impl.CommonsHttpSolrServer。发生这种错误的可能性有多种。

      1/ solrj 的版本可能与您放在 lib 文件夹中的版本不同,或者不同版本的库之间存在冲突

      2/ 不考虑 Tomcat Lib 文件夹。确保此路径有效

      3/ Tomcat PATH 定义不明确。启动脚本或可执行文件用于安装路径和配置文件夹(至少在 Linux 上,但在 Windows 上应该是相同的 ;-))。检查您以推荐的方式启动 Tomcat

      4/ 您已将 jars 添加到 lib 文件夹并热重新部署了该应用程序。为 JVM 重启 tomcat 以考虑新的 jars

      顺便说一下,这些库是第三方库,不必为所有 Tomcat 上下文安装。我建议您将它们添加到 webapps lib 文件夹中作为一个好习惯(WEB-INF/lib 应该可以解决问题)。 然后,您将确保类加载器树上的不同分支上没有类加载器。

      编辑:我认为这是您的 solr/solrj 版本的问题。我发现在Solrj 4.6 SVN 中,根本没有CommonsHTTPSolrServer 的踪迹 我认为这个类自 Solr 4.0 版以来已被删除 使用客户端的代码应该升级到Solr 4或者你的jar最多降级到3.6.2

      【讨论】:

      • 还有其他可能的原因吗?这可能与版本有关吗?我正在使用 solr 4.6 和 liferay 6.1.2 CE ga3 ...因为我已经检查了您的所有建议...所有这些都已正确实施..
      • 我做了一些研究,并相应地编辑了我的答案
      • 我添加的solr 4.6相关的jar是slf4j-api-1.6.6, slf4j-log4j12-1.6.6,solr-core-4.6.0,solr-dataimporthandler-4.6.0,solr -dataimporthandler-extras-4.6.0, solr-solrj-4.6.0 ......你是建议我改用 solr 的低版本,比如 4 及以下?
      • 我只是说正在使用 solrj 客户端的类需要“solr 4.0 之前的”版本。也许您的 solr web portlet 版本太旧了。你用的是什么版本?我可以在网上看到你可以在 6.1.2 EE 版本中将 liferay 与 solr 4 集成
      • 抱歉,我问过你关于 Liferay 版本的问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 2018-05-26
      • 1970-01-01
      • 2018-04-30
      相关资源
      最近更新 更多