我正在运行一个 Junit (SpringJUnit4ClassRunner) 来访问我的集成测试中的一些 spring bean。
我需要通过 @ContextConfiguration 加载一些 xml 文件,这些文件是通过外部方法直接通过 jar 文件部署到我的 Tomcat 的。-- 换句话说,这些文件位于:
my_tomcat_home_path/webapps//WEB-INF/lib/external.jar
如
my_tomcat_home_path/webapps//WEB-INF/lib/external.jar/a.suffix.xml
my_tomcat_home_path/webapps//WEB-INF/lib/external.jar/b.suffix.xml
...
我将Tomcat路径放入我的eclipse类路径中,然后如果我还将它包含到我的eclipse类路径中,那么我的JUnit中的以下代码可以工作
@ContextConfiguration(locations = {"classpath:*suffix.xml"})
但是,如果我不将它放入我的 eclipse 类路径中(因为 jar 文件名可能会不时更改),那么我的以下代码将不起作用(但 Tomcat home "" 仍在 eclipse 类路径中):
@ContextConfiguration(locations = {"classpath:/webapps/<my_app>/WEB-INF/lib/external.jar/*suffix.xml"})
有人可以帮我吗?
非常感谢!!
附加尝试-------------------
我尝试使用 jar 内的包路径,而不是使用 external.jar 本身。代码如下所示:
@ContextConfiguration(locations = {"classpath:/webapps/<my_app>/WEB-INF/lib/path_inside_the_external_jar/*suffix.xml"})
在这种情况下,我不再遇到“由于文件不存在而找不到 XML”的问题。相反,我收到以下错误:
Caused by: java.io.FileNotFoundException: class path resource [webapps/my_app/WEB-INF/lib/path_inside_the_external_jar/] cannot be resolved to URL because it does not exist
at org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:163)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.isJarResource(PathMatchingResourcePatternResolver.java:406)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.findPathMatchingResources(PathMatchingResourcePatternResolver.java:338)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:276)
at org.springframework.context.support.AbstractApplicationContext.getResources(AbstractApplicationContext.java:1018)
at org.springframework.context.support.GenericApplicationContext.getResources(GenericApplicationContext.java:192)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:177)
... 23 more