我正在运行Junit(SpringJUnit4ClassRunner)来访问集成测试中的一些spring bean。
我需要通过@ContextConfiguration加载一些xml文件,这些文件通过外部方法直接通过jar文件部署到我的Tomcat。 - 换句话说,这些文件位于:
my_tomcat_home_path / webapps // WEB-INF / lib / external.jar
,例如
my_tomcat_home_path / web应用// WEB-INF / LIB / external.jar / a.suffix.xml
my_tomcat_home_path / web应用// 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
答案 0 :(得分:2)
非常感谢Didxga的帮助!!
我试图删除&#34; / webapps // WEB-INF / lib&#34;,只留下* suffix.xml的包路径(实际上是* .hbm.xml),然后是@ContextConfiguration(位置如下所示:
"classpath:/internal_path_within_jar/*hbm.xml"
起初,这仍然无法正常工作。
之后,我尝试修改类路径模式,以下代码ALMOST工作
"classpath*:/internal_path_within_jar/*hbm.xml"
这一次,因为加载了hbm.xml文件,我收到以下错误:
Caused by: java.net.UnknownHostException: hibernate.sourceforge.net
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:195)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:411)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:525)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:208)
at sun.net.www.http.HttpClient.New(HttpClient.java:291)
at sun.net.www.http.HttpClient.New(HttpClient.java:310)
但是,我认为现在这是一个不同的问题因为它是hibernate DTD加载问题...也许我不应该在这种方法中加载hbm.xml ...我被迫这样做,因为那些hbm.xml文件在我的应用程序的部署进度期间生成,并且只会出现在Tomcat的websapp / my_app / external.jar和其他地方...
嗯,所以我需要在那部分工作......但是如何通过更改名称但是某种模式将jar包含到我的eclipse路径中?如* -dao.jar。 OMG ...
无论如何,我认为应该解决这篇文章中报道的问题。
非常感谢,didxga!