1

我正在运行一个 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
4

1 回答 1

2

非常感谢 Didxga 的帮助!!

我试图删除“/webapps//WEB-INF/lib”,只留下*suffix.xml(实际上是*.hbm.xml)的包路径,然后@ContextConfiguration(位置如下所示:

"classpath:/internal_path_within_jar/*hbm.xml"

起初,这仍然不起作用。

之后,我尝试修改类路径模式,以下代码几乎可以工作

"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)

但是,我认为现在这是一个不同的问题,因为它是休眠 DTD 加载问题......也许我不应该在这种方法中加载 hbm.xml......我被迫这样做,因为那些 hbm.xml 文件是在我的应用程序的部署进度,只会出现在 Tomcat 的 websapp/my_app/external.jar 和其他地方...

嗯,所以我需要在那部分工作......但是如何在我的 Eclipse 路径中包含一个更改名称但特定模式的 jar?如*-dao.jar。我的天啊...

无论如何,我认为这篇文章中报告的问题应该得到解决。

非常感谢,didxga!

于 2013-05-31T08:56:38.357 回答