0

我有一个使用 Maven 编译/构建的 Spring Web 项目。构建项目没有问题。我正在尝试在 Tomcat (v6) 服务器上的 Eclipse (3.3.2) 中运行该项目。

作为 Spring 项目的一部分,我在 WEB-INF 目录中有一个 spring-servlet.xml 文件。此文件包含另一个具有数据源配置的资源 xml 文件。

<import resource="classpath:${datasourceInclude}.xml"/>

现在,当使用 Maven 编译项目时,它会解析变量 ${datasourceInclude} 并将其设置为适当的值,从而生成具有适当值的 spring-servlet.xml。

<import resource="classpath:datasourceLocal.xml"/>

但是当我尝试在 Eclipse (Tomcat) 中运行该项目时,我收到以下错误:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath:${datasourceInclude}.xml]
Offending resource: ServletContext resource [/WEB-INF/spring-servlet.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [${datasourceInclude}.xml]; nested exception is java.io.FileNotFoundException: class path resource [${datasourceInclude}.xml] cannot be opened because it does not exist
    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
...
...

基本上,当我启动 Tomcat 时,它会尝试从具有 ${datasourceInclude} 变量的 /src/main/webapp/WEB-INF 文件夹中选择 spring-servlet.xml。

谁能告诉我如何解决这个问题,这样我就不必更改 spring-servlet.xml 并添加硬代码值来代替 ${datasourceInclude} 变量。

4

2 回答 2

1

尝试添加war:inplace到 Maven 项目配置页面中为资源过滤执行的目标列表。

右键单击您的项目,然后转到Properties > Maven > Lifecycle Mapping并添加war:inplace目标以调用资源更改,如下所示:

替代文字

于 2010-03-10T15:06:01.370 回答
0

谁负责解析 Spring XML 中的属性/变量名称?这是在编译时通过 Maven 完成的,还是应该在运行时发生?如果在运行时,您使用的是 Spring 的PropertyPlaceholderConfigurer吗?

于 2010-03-10T10:47:10.733 回答