2014-04-11 50 views
0

我有一個新的nexus服務器和一個新的生成服務器。我MVN打包項目,並得到以下錯誤,當它進入測試階段:Maven依賴項javax.servlet必須包含在POM中用於新建服務器

org.mule.api.registry.RegistrationException: Failed to invoke lifecycle phase "initialise" on object: [email protected] (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> 

開放式問題 - 爲什麼會這樣呢?

+0

哪裏是開放的結束..你關閉所有.. :) – sakura

回答

1

在編譯導入javax.servlet包的類時,需要在類路徑上具有該依賴關係。

例如,當你有public class FooServlet extends HttpServlet,那麼Java編譯器需要能夠得到javax.servlet.http.HttpServlet檢查父究竟是不是final,無論您是實現所有的抽象方法等


javax.servlet依賴那麼需要在pom.xml中標記爲provided。這是因爲所有的servlet容器都已經包含了這個依賴關係。如果您未能將該庫從您的WAR中排除,則Web應用程序中的HttpServlet類將不同於servlet容器使用的HttpServlet類(即FooServlet instanceof HttpServlet將爲false,因爲Java中的類不僅由它們的限定名稱定義,而且還由他們的類裝載機)。

相關問題