Spring内部的war无法在内部jar文件中找到classpath资源

时间:2012-10-05 00:17:15

标签: spring tomcat classpath war

我有一个像这样组织的项目:

core
  -- /src/main/resources/company/config/spring-config.xml
webapp
  -- /WEB-INF/applicationContext.xml

网络应用取决于core.jar,我在部署时在WEB-INF/lib中正确包含该内容。

web.xml我有:

<param-value>
    /WEB-INF/applicationContext.xml
</param-value>

applicationContext.xml我有:

<import resource="classpath:/company/config/spring-config.xml" />

但是当我跑步时,我收到了这个错误:

2012-10-04 20:03:39,156 [localhost-startStop-1] springframework.web.context.ContextLoader ERROR: Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath:/company/config/spring-config.xml]
Offending resource: ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [company/config/spring-config.xml]; nested exception is java.io.FileNotFoundException: class path resource [company/config/spring-config.xml] cannot be opened because it does not exist
    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
....
Caused by: java.io.FileNotFoundException: class path resource [company/config/spring-config.xml] cannot be opened because it does not exist
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:142)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
... 36 more

spring-config.xml在webapp中时,一切正常。

我注意到从堆栈跟踪中的一些错误中删除了前导/,我想知道这是否与它有关。

此外,我(不幸的是)使用Spring 2.5,如果这很重要。

1 个答案:

答案 0 :(得分:13)

为了将来参考,我经过多次调试后发现了问题。事实证明Eclipse正在构建我的核心&#34;库作为一个jar,但有一个Web应用程序包布局,所以不是我的资源位于这里:

/company/config/spring-config.xml

它位于这里:

/WEB-INF/company/config/spring-config.xml

导致了这个问题。我之前曾经检查了几次罐子,但从来没有注意到偷偷摸摸的&#34; / WEB-INF&#34;躲在明显的视线中。

删除项目并将其重新导入Eclipse(通过Maven pom.xml文件)还不足以解决问题。

我不得不手动删除特定于Eclipse的.project,.classpath和.settings文件。当我这样做并重新导入项目时,一切都已修复。

本课程的寓意是:总是检查您的资源路径,当异常显示&#34;找不到文件时#34;。