首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Maven dependency javax.servlet必须包含在新生成服务器的POM中

Maven dependency javax.servlet必须包含在新生成服务器的POM中
EN

Stack Overflow用户
提问于 2014-04-11 19:23:04
回答 1查看 626关注 0票数 0

我有一个新的nexus服务器和一个新的构建服务器。我mvn打包了一个项目,当它进入测试阶段时会得到以下错误:

代码语言:javascript
运行
复制
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,所以我认为这可能就是它,它似乎确实解决了问题。

代码语言:javascript
运行
复制
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>${servlet-api-release-version}</version>
  <scope>provided</scope>
</dependency>

开放式问题--为什么会这样?

EN

回答 1

Stack Overflow用户

发布于 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中的类不仅由它们的限定名定义,而且还由它们的类加载器定义)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23011247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档