2012-02-20 47 views
4

我正在开发一个控制器的简单弹簧mvc应用程序。当我部署战争文件时,我遇到下面的异常。Spring 3.1 web应用程序问题

java.lang.IllegalAccessError: tried to access class org.springframework.core.convert.support.StringToBooleanConverter from class org.springframework.core.convert.support.DefaultConversionService 
    at org.springframework.core.convert.support.DefaultConversionService.addScalarConverters(DefaultConversionService.java:61) 
    at org.springframework.core.convert.support.DefaultConversionService.addDefaultConverters(DefaultConversionService.java:53) 
    at org.springframework.core.convert.support.DefaultConversionService.<init>(DefaultConversionService.java:42) 
    at org.springframework.core.env.AbstractPropertyResolver.<init>(AbstractPropertyResolver.java:44) 
    at org.springframework.core.env.PropertySourcesPropertyResolver.<init>(PropertySourcesPropertyResolver.java:42) 
    at org.springframework.core.env.AbstractEnvironment.<init>(AbstractEnvironment.java:95) 
    at org.springframework.core.env.StandardEnvironment.<init>(StandardEnvironment.java:54) 
    at org.springframework.web.context.support.StandardServletEnvironment.<init>(StandardServletEnvironment.java:43) 
    at org.springframework.web.servlet.HttpServletBean.<init>(HttpServletBean.java:90) 
    at org.springframework.web.servlet.FrameworkServlet.<init>(FrameworkServlet.java:211) 
    at org.springframework.web.servlet.DispatcherServlet.<init>(DispatcherServlet.java:303) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
+0

你可以仔细检查你所有的Spring JAR是否有相同的版本? – 2012-02-20 19:08:27

+0

是的,我所有的弹簧罐都是3.1.0版。 – user509755 2012-02-20 19:13:41

+0

我注意到的另外一件事是,如果我将3.1.0的spring版本更改为3.0.7,那么一切正常。所以这与春天的最新版本有关。 – user509755 2012-02-20 19:17:36

回答

0

这听起来像一个类加载器的问题。我遇到过这种情况之前,当我遇到MyEclipse加载不同的jar文件而不是我认为被应用程序加载的冲突时!

检查的一种方法是运行Process Explorer并查看加载到内存中的jar文件以及它们的来源。

要在5.4.3.1:

5.3更具体地指定你所得到的,我从列出了详细的错误JVM 7 specification引用错误。创建和加载

在运行时,一个类或接口不受其名称单独确定的,而是由一对:其二进制名称(§4.2.1)和它的定义类装载程序。每个这样的类或接口都属于一个运行时包。 类或接口的运行时包由包名称和类或接口的类加载器定义。

5.4.3.1。类和接口分辨率

要解决从d到用N表示一个类或接口℃的未解析的符号引用,则执行以下步骤:

d的定义类装载程序被用来创建一个类或界面由N表示。该类或界面为C.该过程的细节在§5.3中给出。

因类或接口创建失败而导致的任何异常都可以由于类和接口解析失败而抛出。

如果C是一个数组类,并且其元素类型是引用类型,那么通过递归地调用第5.4.3.1节中的算法来解析表示元素类型的类或接口的符号引用。

最后,检查对C的访问权限: 如果C对D无法访问(第5.4.4节),则类或接口解析将抛出IllegalAccessError。

例如,如果C是最初声明为公开的但在D编译后更改为非公开的类,则可能发生此情况。

如果步骤1和步骤2成功,但步骤3失败,则C仍然有效且可用。尽管如此,解决方案失败了,D禁止访问C.

总而言之,听起来像这个jar是来自另一个包,它来自另一个类加载器。