Tomcat中的Maven War部署错误

问题描述:

基本上我无法克服这个错误,一次又一次地尝试。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

“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

将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