2013-03-15 154 views
0

基本上我無法克服這個錯誤,一次又一次地嘗試。Tomcat中的Maven War部署錯誤

我已經將我目前的javaee項目移植到maven中,從maven 3.0.3發起了一場戰爭,它似乎不在tomcat 6.0.10中部署。我使用jdk 1.7(儘管如此,我使用jdk 1.6和Tomcat 7)

它引發該錯誤是

Mar 15, 2013 10:24:39 AM org.apache.catalina.loader.WebappClassLoader validateJa 
rFile 
INFO: validateJarFile(D:\apache-tomcat-6.0.10\webapps\Name\WEB-INF\lib\ 
javaee-api-5.0-1.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Off 
ending class: javax/servlet/Servlet.class 
Mar 15, 2013 10:24:39 AM org.apache.catalina.loader.WebappClassLoader validateJa 
rFile 
INFO: validateJarFile(D:\apache-tomcat-6.0.10\webapps\Name\WEB-INF\lib\ 
servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offe 
nding class: javax/servlet/Servlet.class 
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further detail 
s. 
Inside Cache Manager Initialization new .... 
java.lang.NullPointerException 
Mar 15, 2013 10:24:59 AM org.apache.catalina.core.StandardContext start 
SEVERE: Error listenerStart 
Mar 15, 2013 10:24:59 AM org.apache.catalina.core.StandardContext start 
SEVERE: Context [/Name] startup failed due to previous errors 

當我試圖找出有關錯誤「罐子未加載。參見Servlet規範2.3,節9.7.2」時,它表示,優選jar必須在複製和運行時都存在,所以我在pom.xml中添加了servlet-api-2.5.jar。 javaee-api-5.0.1.jar已經在那裏。

添加依賴後,我得到相同的錯誤。

任何人都知道這種奇怪的行爲。

+0

可能的重複[錯誤:Servlet Jar未加載...正在運行的類:javax/servlet/Servlet.class](http://stackoverflow.com/questions/1993493/error-servlet-jar-not- loaded-offending-class-javax-servlet-servlet-class) – Raedwald 2015-02-13 13:13:42

回答

1

「jar not loaded」錯誤是由於Tomcat運行時選擇了多個javax/servlet/Servlet.class引起的。從您應用的WEB-INF/lib中刪除javaee-api-5.0-1.jarservlet-api-2.5.jar。這些罐子已經由Tomcat提供。要在<TOMCAT_HOME>\lib中驗證此外觀以查看這些罐子已經存在。

+0

servlet-api-2.5.jar存在,刪除它但javaee-api-5.0-1.jar不存在,所以我仍然卡住。 是否有tomcat的javaee-api jar有其依賴的lib? – ItachiUchiha 2013-03-15 09:05:38

+0

'javaee-api-5.0.1.jar'不在哪裏?在'/lib'?無論如何,請嘗試從'WEB-INF/lib'中移除它,看看會發生什麼。 – 2013-03-15 17:31:30

3

將servlet api的範圍更改爲<scope>provided</scope>,因爲它是提供的通過tomcat。而且tomcat不提供javaee-api,所以將它保存在你的webapp中。

Tomcat不支持完整的Java EE堆棧,但只支持它的一部分(即支持servlet-api,但不支持JTA,JPA,JMS):這就是爲什麼您需要在您的Web中包含javaee-api -app

+0

僅通過添加依賴關係,是否可以在Tomcat中執行所有Java EE功能?不需要使用TomEE? – 2018-02-19 09:58:52

+1

@PanuHaaramo號Tomcat有一個嵌入了servlet-API的實現,但沒有實現JTA,JPA,JMS ......所以要在tomcat中使用它們,你必須在類路徑中明確地添加你最喜歡的那些規範的實現。 – ben75 2018-02-19 12:16:16