10

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

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

webapp 依赖于,它在我部署时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,如果这很重要的话。

4

1 回答 1

13

为了将来参考,经过多次调试,我发现了问题所在。事实证明 Eclipse 正在将我的“核心”库构建为 jar,但具有 Web 应用程序包布局,因此我的资源不是位于此处:

/company/config/spring-config.xml

它位于此处:

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

这导致了问题。我之前已经检查了几次罐子,但从未注意到隐藏在视线中的鬼鬼祟祟的“/WEB-INF”。

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

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

本课的寓意是:当异常显示“未找到文件”时,请始终检查您的资源路径。

于 2012-10-07T00:42:52.510 回答