我试图在同一个应用程序中使用spring版本:第一个是带有spring 2.6的webapp,第二个是带有spring 4.0.2的jar客户端。客户端与另一个应用程序通信,并将成为webapp的依赖项。问题是类加载器只会从spring加载一次公共类,它肯定会失败。
我尝试使用ElasticSearch使用着色依赖项(maven shade plugin)并将spring从客户端重定位到另一个包(从org.springframework到my.springframework),并且uber jar似乎构造得很好。
问题是Spring基于spring.schemas和spring.handlers来验证xml配置文件并从类路径加载这些文件(META-INF文件夹,这些路径在Spring代码中是硬编码的 - e.q.PluggableSchemaResolver)。我将这些文件修改为从org.srpingframework指向my.springframework。
在运行时,似乎类加载器从webapp读取这些文件,webapp具有这些文件,但具有真正的弹簧路径,并且异常类似于
org.realsearch.springframework.beans.FatalBeanException:名称空间[http://www.springframework.org/schema/context]的类[org.springframework.context.config.ContextNamespaceHandler]未实现[my.springframework.beans.factory.xml.NamespaceHandler]接口
对我来说,似乎无法实现我正在尝试的东西(在同一个应用程序中使用其中一个重新定位的弹簧版本)。这里有什么想法?我是怀疑吗?:d