我们正在部署一个WAR文件到Tomcat 5.5,如果WEB-INF \ classes包含.classes文件它工作正常,但如果我们移动包含.classes到WEB-INF \ lib中,我们得到一个.jar文件在运行时异常抱怨java.lang.NoSuchMethodError,但在.jar文件现有类文件中包含的类和方法不退出!

任何帮助,将不胜感激。

有帮助吗?

解决方案

这可能由于一个类冲突引起的。确保有不类的旧版本某处(Tomcat的共享文件夹,WEB-INF / classes中,WEB-INF / lib目录)。如果是这样的话,实际上你可以不知道Tomcat将加载哪些类。如果它选择一个没有该方法中,所遇到的异常会发生。

其他提示

既然你得到一个的NoSuchMethodError,而不是ClassNotFoundError,就意味着你有一个旧版本的类的地方(jar文件之外)。你需要找到并删除它。

这是defently类closin 请大家在这里 HTTP看看: //tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html#Class%20Loader%20Definitions

,你可以看到存在用于类比较WEB-INF / lib中WEB-INF /类下一个更高的优先级。你有两个类具有相同的名称(和包)。当其中一人是在类文件夹,它具有更高的优先级。当它们都处于lib文件夹,则第二个获得第一(罐子基于它们的α-betical顺序具有优先级)

这可以解释你的情况。

希望它可以帮助   - Yonatan

从Web应用程序的角度来看,类或资源加载看起来在下面的储存库,顺序如下:结果

引导你的JVM点击类 系统类加载器类(如上所述),点击 / WEB-INF / classes目录Web应用程序的搜索 Web应用程序结果的/WEB-INF/lib/*.jar 常见的类加载器类(如上所述),点击

通过“通用类加载器”搜索的位置是通过在$ CATALINA_BASE / CONF / catalina.properties的common.loader属性定义。这是我们启用/定义共享位置;结果,shared.loader = $ {catalina.base} /共享/类,$ {catalina.base} /共享/ lib中/ *。罐子结果

和上面的顺序给出你所面临的问题更深入的了解。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top