簡體   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