Java Spring HtmlUnit依赖项
我有一个带有HtmlUnit依赖项的Spring MVC应用程序。我在@Component类中使用HtmlUnit实用程序。问题是,在编译(root-cause java.lang.NoClassDefFoundError:org/apache/http/HttpEntity)之后,在浏览器启动(索引页)时,我会看到以下页面:Java Spring HtmlUnit依赖项,java,spring,maven,htmlunit,Java,Spring,Maven,Htmlunit,我有一个带有HtmlUnit依赖项的Spring MVC应用程序。我在@Component类中使用HtmlUnit实用程序。问题是,在编译(root-cause java.lang.NoClassDefFoundError:org/apache/http/HttpEntity)之后,在浏览器启动(索引页)时,我会看到以下页面: > HTTP Status 500 - Servlet.init() for servlet mvc-dispatcher threw > exception
> HTTP Status 500 - Servlet.init() for servlet mvc-dispatcher threw
> exception
type Exception report
message Servlet.init() for servlet mvc-dispatcher threw exception
description The server encountered an internal error that prevented it from fulfilling this request.
exception javax.servlet.ServletException: Servlet.init() for servlet mvc-dispatcher threw exception
root cause java.lang.NoClassDefFoundError: org/apache/http/HttpEntity
root cause java.lang.ClassNotFoundException: org.apache.http.HttpEntity
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
java.lang.Class.getDeclaredConstructors0(Native Method)
java.lang.Class.privateGetDeclaredConstructors(Class.java:2532)
java.lang.Class.getDeclaredConstructors(Class.java:1901)
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:230)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:976)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:949)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607)
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:647)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:598)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:661)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:517)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:458)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:138)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
我已经使用maven包含了所有需要的依赖项,下面是我的pom.xml:
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.15</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.3.5</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.5</version>
</dependency>
net.sourceforge.htmlunit
htmlunit
2.15
org.apache.commons
commons-lang3
3.1
org.apache.httpcomponents
httpime
4.3.5
org.apache.httpcomponents
httpclient
4.3.5
如果我从类中删除@Component注释-应用程序在启动时不会失败,但在实际的控制器调用时会失败,而实际的控制器调用使用该类(内部带有HtmlUnit)-同样的错误。若我从控制器中删除使用HtmlUnit的类,那个么一切都很好。我还试着自己添加库,没有使用maven,这对以太没有帮助关于它的主要谜团是,我的类(使用HtmlUnit)在通常的控制台应用程序中完美地工作。所以我尝试了很多东西,但我仍然不明白这个问题的原因是什么,为什么它在Spring上不工作???也许它只适用于单线程应用程序?但是为什么会有ClassNotFoundException?您如何运行此应用程序?您是否将其作为tomcat服务器中的war归档运行?如果是这样,war归档文件是否在/WEB-INF/lib文件夹中包含htmlunit依赖项?运行应用程序的运行时上下文显然与控制台应用程序的类路径不同 htmlunit依赖项应该位于/WEB-INF/lib下,或者位于服务器类路径中(但不建议使用后者)