我有一个新的nexus服务器和一个新的构建服务器。我mvn打包了一个项目,当它进入测试阶段时会得到以下错误:
org.mule.api.registry.RegistrationException: Failed to invoke lifecycle phase "initialise" on object: org.mule.config.bootstrap.SimpleRegistryBootstrap@191a01dd (org.mule.api.lifecycle.LifecycleException)
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 80 more
NOT FOUND
我创建了一个barebone原型pom,因为我正在对此进行故障排除。这包括javax.servlet,所以我认为这可能就是它,它似乎确实解决了问题。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-api-release-version}</version>
<scope>provided</scope>
</dependency>
开放式问题--为什么会这样?
发布于 2014-04-11 20:29:11
当你编译从javax.servlet
包中导入某些东西的类时,你需要依赖于你的类路径。
例如,如果您有public class FooServlet extends HttpServlet
,那么Java编译器需要能够让javax.servlet.http.HttpServlet
检查父对象是否不是final
,您是否正在实现所有抽象方法,等等。
然后需要在pom.xml
中将javax.servlet
依赖项标记为provided
。这是因为所有servlet容器都已包含该依赖项。如果您未能从WAR中排除该库,则web应用程序中的HttpServlet
类将不同于servlet容器使用的HttpServlet
类(即FooServlet instanceof HttpServlet
将为false,因为Java中的类不仅由它们的限定名定义,而且还由它们的类加载器定义)。
https://stackoverflow.com/questions/23011247
复制相似问题