2016-03-15 245 views
0

我正在使用spring框架和maven工具在java中开发一个MVC web应用程序。HTTP状态500 - java.lang.LinkageError

我在运行我的应用程序时出现以下错误。

HTTP Status 500 - java.lang.LinkageError: loader constraint violation: when resolving method 
"org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(Ljavax/servlet/ServletConfig;)Lorg/apache/tomcat/InstanceManager;" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, 
org/apache/jsp/redirect_jsp, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for the method's defining class, 
org/apache/jasper/runtime/InstanceManagerFactory, have different Class objects for the type org/apache/tomcat/InstanceManager used in the signature 

回答

2

您的WEB-INF/lib Web应用程序的文件夹服务器特定的jar文件。例如:jsp-api.jar,el-api.jar,servlet-api.jar等。如果使用maven进行依赖关系管理,则需要删除所有这些。

删除它后,如果您的代码中出现编译错误,请从项目属性中添加服务器运行时。

+0

应用程序在本地运行但部署到服务器错误将出现,以解决它。请帮助我 – prabakar

2

有没有servlet-api.jar是war文件的一部分?请在部署过程中将其删除,因为每个Web服务器都有自己的servlet-api实现。所以只能在你的代码中使用它来编译目的。

+0

应用程序在本地运行,但部署到服务器错误发生。 – prabakar

+0

您是否在两个位置使用相同的服务器?提取你的war文件并检查servlet-api jar是否存在于WEB-INF/lib文件夹中。 –

0

根据您发布的错误,正在加载组织/阿帕奇/ JSP/redirect_jsp类加载器和类加载器
组织/阿帕奇/碧玉/运行/ InstanceManagerFactory,有种类不同的类的对象组织/ apache/tomcat/InstanceManager这意味着你在两个不同的类加载器中引用一个包含org.apache.tomcat.InstanceManager的jar,并且这些加载器具有委托关系。 Class对象基于其完全限定的类名和它们的加载器是唯一的。

这是一个相当不错的article to read关于这种类型的错误。

您需要了解如何两次加载该课程并修改设置,以便只加载一次。

0

正如前面的文章中提到的,它应该是由于您的项目中存在冲突的库(jsp-api,servlet-api,el-api等),您需要排除这些库。

如果您使用的是spring-boot,则需要在生成要在tomcat中部署的war时排除tomcat库。

对于离。

<exclusion> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
</exclusion> 
<exclusion> 
    <groupId>org.apache.tomcat.embed</groupId> 
    <artifactId>tomcat-embed-el</artifactId> 
</exclusion> 
相关问题