2013-03-13 85 views
0

当这个错误部署Web应用程序到本地的Tomcat(在eclipse),启动failes:运行的Web应用程序失败,LinkageException

SEVERE: Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener

java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.addELResolver(Ljavax/el/ELResolver;)

the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, com/sun/faces/config/ConfigureListener, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type p.JspApplicationContext.addELResolver(Ljavax/el/ELResolver;)

这到底是怎么回事?我已阅读,它可能有一些做在WEB-INF/lib中有servlet的广口瓶,但似乎并没有在这里事项:

WEB-INF/lib JARs

没有“的javax。 *“里面有jar,那么为什么这个包中的类会失败?

回答

3

从您的应用程序中删除servlet-api。这绝不应该在webapp distributiuon中。

Tomcat(或任何容器)必须从它自己的类路径中提供这些类,以便类的多个实例不会被类加载。

如果您使用的是maven,则需要使用provided依赖项。

+0

即使在删除servlet-api之后也出现同样的错误 – 2013-03-13 10:03:48

+0

在这种情况下,请转到jar的其余部分,并确保这些类不包含在其他任何地方。 – 2013-03-13 10:04:43

+0

对于“这些类”,你的意思是任何'javax.servlet',对吧? – 2013-03-13 10:06:26

1

该问题是由于位数引起的。检查您正在使用的操作系统的哪一位,并安装该位的jre。因为tomcat是一个Java应用程序,它没有任何缺点。这意味着它可以在64位以及32位上运行。

可以同时安装64位和32位版本的Java。如果Tomcat 7安装程序发现只安装了Java 7 32位,那么它会将tomcat 7安装到Program files(x86)目录中。但Tomcat 7安装程序将选择64位版本的Java,并将其自身安装到Program Files文件夹中。

但是,您不能假设Tomcat 7在这种情况下使用的是64位Java,因为用户在安装tomcat 7后可能已经添加了64位Java,而tomcat 7不知道如何从其中更改其“位”发生这种情况时32到64。

相关问题