【发布时间】:2013-07-02 15:34:54
【问题描述】:
我有一个应用程序打包如下:
+EAR
+WAR
+ejb.jar
+lib
+core.jar
+plugin1.jar
+plugin2.jar
...
每个“pluginX.jar”在根目录下都包含一个spring配置文件。 当应用程序启动时,core.jar 会尝试加载 spring 配置文件:
String matchString = "classpath*:/./Plugin.*.spring.xml";
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources(matchString);
这适用于 JBoss EAP 5.1,但不适用于 WebSphere 7。
我尝试直接加载资源:
ClassLoader cl = this.getClass().getClassLoader();
log.info("class loader: " + cl.toString());
URL u = cl.getResource("Plugin.1.spring.xml");
并得到了相同的结果,尽管 WebSphere 的日志告诉本地类路径包含“pluginX.jar”:
com.ibm.ws.classloader.CompoundClassLoader@48da48da[app:CG EAR]
本地类路径: /opt/IBM/WAS7/AppServer/profiles/srv01/installedApp/cell01/CG.EAR.ear/lib/pluginX.jar
父级:com.ibm.ws.classloader.ProtectionClassLoader@4c654c65
委托模式:PARENT_LAST
有什么想法吗?
【问题讨论】:
-
'classpath*:/./Plugin.*.spring.xml' 应该是什么意思?为什么会有这么复杂的模式?
-
这是一种 Ant 风格的模式,用于查找每个文件 xml,例如“Plugin.1.spring.xml”。它适用于 JBoss
-
已解决:似乎 spring 类 PathMatchingResourcePatternResolver 无法遍历 WebSphere 中的 jar 文件。 javadocs 类声明:“如果获取 jar URL,解析器必须能够从中获取 java.net.JarURLConnection,或者手动解析 jar URL,以便能够遍历 jar 的内容,并解析通配符. 这将在大多数环境中工作,但在其他环境中会失败......“
标签: spring jakarta-ee jboss websphere classpath