繁体   English   中英

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

[英]Maven dependency javax.servlet must be included in POM for new build server

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

我在解决此问题时创建了一个准系统原型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依赖项标记为pom.xml provided的。 这是因为所有servlet容器都已包含该依赖性。 如果你不能从你排除这个图书馆战争中, HttpServlet Web应用程序的类将是从不同HttpServlet由servlet容器中使用的类(即FooServlet instanceof HttpServlet是假的Java类不仅受它们的限定名定义,以及他们的类加载器)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM