我在 mule服务器上运行我的应用程序。 Mule服务器有自己的罐子集,我在mule服务器上运行的应用程序也有几个罐子。在处理Spring批处理时,我发现JettisonMappedXmlDriver
类存在于我的应用程序xstream jar
以及mule server jar
中。这个类在内部引用MappedXMLOutputFactory
中的jettision jar
类,这个类也在我的应用程序中,但有些我如何得到MappedXMLOutputFactory
类的 classnotfound错误。这看起来像类加载器问题。
如果我在mule服务器中添加jettision jar
,那么一切正常,但我不能在我的生产环境中添加这个jar。有些人可以告诉我如何强制从我的应用程序jettision jar
文件加载该类。这对我来说很奇怪,因为 classloader 应该来自MappedXMLOutputFactory
的{{1}}类来自我的应用程序文件夹,就像它正在为其他类做的那样。
如果有人发现这样的问题,请告诉我。
答案 0 :(得分:1)
Mule应用程序类加载器是可配置的:http://www.mulesoft.org/documentation/display/current/Classloader+Control+in+Mule
因此,只需配置应用程序的类加载器,首先查看它在/lib
中嵌入的JAR,然后再推迟到Mule System类加载器。
答案 1 :(得分:0)
如果在不同的jar中有相同类的多个版本,则会遇到此问题,尽管方法签名不同。 ClassNotFound错误通常不是唯一发生的异常,在此之前您经常会看到另一个异常,通常是" NoSuchMethodException"这迫使类加载器卸载有问题的类。
我建议使用maven或gradle来组装你的应用程序,然后使用dependency:tree target来查询版本冲突。