gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:09:22 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com