java - Maven 依赖项 javax.servlet 必须包含在新构建服务器的 POM 中

标签 java maven servlets

我有一个新的 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

我在解决这个问题时创建了一个准系统原型(prototype) pom。这包括 javax.servlet,所以我想可能就是这样,而且它似乎确实解决了问题。

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>${servlet-api-release-version}</version>
  <scope>provided</scope>
</dependency>

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

最佳答案

当您编译从 javax.servlet 导入某些内容的类时包,您需要对类路径具有依赖关系。

例如,当您有public class FooServlet extends HttpServlet时,那么Java编译器需要能够得到javax.servlet.http.HttpServlet检查父级是否不是 final ,是否要实现所有抽象方法等。

<小时/>

javax.servlet然后需要将依赖关系标记为 providedpom.xml 。这是因为所有 servlet 容器都已包含该依赖项。如果您未能从 WAR 中排除此库,HttpServlet您的 Web 应用程序中的类将不同于 HttpServlet servlet 容器使用的类(即 FooServlet instanceof HttpServlet 将为 false,因为 Java 中的类不仅由其限定名称定义,还由其类加载器定义)。

关于java - Maven 依赖项 javax.servlet 必须包含在新构建服务器的 POM 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23011247/

相关文章:

java - 我正在使用 Eclipse IDE。 jsp 代码执行但 servlet 返回空白页

java - 复合 Material 的关键听众?

java - 如何在java中对嵌套列表进行排序

java - Bitbucket 与 Java Maven 项目和 JFX 的管道

java - 如何将 maven 与 eclipse 集成

java - 如何通过 Servlet 的 doPost() 方法在 Tomcat 服务器上创建文件?

jakarta-ee - Tomcat 上出现 "Servlet is currently unavailable"错误

JavaFX FXML : Expand ScrollPane to Fit height of its Content Pane Until it reahces its MaxHeight property

java - 我正在使用processing3处理凸包项目,有人可以告诉我是否有退出函数(不是整个程序)的方法吗?

java - spring-boot:在哪里定义了生成 jar 文件的设置